import 'dotenv/config';
import db from '../src/database/models/index.js';
import { syncLocationManagers, syncRegionManager, syncZoneManager } from '../src/modules/master/syncHierarchy.service.js';

async function syncAll() {
    console.log('--- Starting Master Hierarchy Synchronization ---');
    try {
        await db.sequelize.authenticate();
        console.log('✓ Database connected.');

        // 1. Sync all Zones
        console.log('Syncing Zones...');
        const zones = await db.Zone.findAll({ attributes: ['id', 'name'] });
        for (const zone of zones) {
            await syncZoneManager(zone.id);
            console.log(`  - Synced Zone: ${zone.name}`);
        }

        // 2. Sync all Regions
        console.log('Syncing Regions...');
        const regions = await db.Region.findAll({ attributes: ['id', 'name'] });
        for (const region of regions) {
            await syncRegionManager(region.id);
            console.log(`  - Synced Region: ${region.name}`);
        }

        // 3. Sync all Districts
        console.log('Syncing Districts (This may take a moment)...');
        const locations = await db.District.findAll({ attributes: ['id', 'name'] });
        let count = 0;
        for (const loc of locations) {
            await syncLocationManagers(loc.id);
            count++;
            if (count % 50 === 0) console.log(`  - Synced ${count} districts...`);
        }
        console.log(`✓ Total Districts Synced: ${count}`);

        console.log('\n--- Synchronization Complete ---');
        process.exit(0);
    } catch (error) {
        console.error('❌ Synchronization failed:', error);
        process.exit(1);
    }
}

syncAll();
