import fs from 'fs';
import mysql from 'mysql2/promise';
import dotenv from 'dotenv';

dotenv.config();

interface Region {
    id: number;
    name: string;
    slug: string;
    parent_id: number | null;
    level: 'province' | 'city' | 'district';
    is_province: boolean | null;
}

async function extractRegions(data: any): Promise<Region[]> {
    const regions: Region[] = [];

    try {
        // const provinces = data.multiCity.data.children[0].children[0].relativeChildren;
        const provinces = data.city.compressedData;
        // console.log('provinces=',provinces);

        for (const provinceWrapper of provinces) {
            const province = provinceWrapper;
            const provinceId = province.id;
            // console.log('provinceWrapper=',provinceWrapper[3]);

            // افزودن استان
            // regions.push({
            //     id: provinceId,
            //     name: province.name,
            //     slug: province.slug,
            //     parent_id: province.parent,
            //     level: 'province',
            //     is_province:province.isProvince,
            // });
            //
            // const cities = province.children[0].relativeChildren || [];
            // console.log('cities=',cities);
            //
            // for (const city of cities) {
            //     const cityId = city.id;
            //
            //     // افزودن شهر
            //     regions.push({
            //         id: cityId,
            //         name: city.name,
            //         slug: city.slug,
            //         parent_id: provinceId,
            //         level: 'city',
            //         is_province:city.isProvince,
            //     });
if (provinceWrapper[3]) {
    // console.log('provinceWrapper=', provinceWrapper[3]);
    for (const [key, value] of Object.entries(provinceWrapper[3])) {
        console.log('val=:','[', key,' , ', value,']');
        // console.log('مقدار:', value);
        // const keyP=key;
        // const valueP=value;
                regions.push({
                    id: Number(key),
                    name: '',
                    slug: String(value),
                    parent_id: provinceWrapper[0],
                    level: 'district',
                    is_province: false,
                });

    }
// }else{
//     console.log('provinceWrapper=00000');
}
    // console.log('provinceWrapper=',provinceWrapper[3][0]);

            //     // بررسی مناطق (districts) داخل شهر (در صورت وجود)
            //     const districts = provinceWrapper.relativeChildren || city.children || [];
            //     for (const district of districts) {
            //         regions.push({
            //             id: district.id,
            //             name: district.name,
            //             slug: district.slug,
            //             parent_id: cityId,
            //             level: 'district',
            //             is_province:district.isProvince,
            //         });
            //     }
            // }
        }
    } catch (err) {
        console.error('⛔ خطا در استخراج داده:', err);
    }

    return regions;
}

async function main() {
    const fileContent = fs.readFileSync('./divar-tag.txt', 'utf-8');

    const match = fileContent.match(/(\{.*?\});/s);
    if (!match) throw new Error('⛔ نتوانستم JSON را از فایل استخراج کنم.');

    let rawJson = match[1];
    const jsonData = JSON.parse(rawJson);
    // console.log('jsonData=',jsonData);

    const regions = await extractRegions(jsonData);
  //
    const conn = await mysql.createConnection({
        host: process.env.MYSQL_HOST,
        user: process.env.MYSQL_USER,
        password: process.env.MYSQL_PASSWORD,
        database: process.env.MYSQL_DATABASE,
    });

    await conn.execute(`
    CREATE TABLE IF NOT EXISTS locations (
      id INT PRIMARY KEY,
      name VARCHAR(255),
      slug VARCHAR(255),
      parent_id INT,
      level ENUM('province', 'city', 'district'),
      is_province TINYINT(1)
    )
  `);

    const insertQuery = `REPLACE INTO locations (id, name, slug, parent_id, is_province, level) VALUES (?, ?, ?, ?, ?, ?)`;
console.log('region=',regions);
    for (const region of regions) {
        await conn.execute(insertQuery, [
            region.id,
            region.name,
            region.slug,
            region.parent_id,
            region.is_province,
            region.level,
        ]);
    }

    await conn.end();
    console.log(`✅ ${regions.length} رکورد (استان، شهر، منطقه) با موفقیت وارد شد.`);
}

main().catch(console.error);
