
import dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
dotenv.config({ path: path.join(__dirname, '../.env') });

import db from '../src/database/models/index.js';
import { syncLocationManagers } from '../src/modules/master/syncHierarchy.service.js';

async function run() {
  try {
    // 1. Find the South Delhi district
    const district = await db.District.findOne({
      where: { name: { [db.Sequelize.Op.iLike]: '%South Delhi%' } }
    });

    if (!district) {
      console.log('District "South Delhi" not found');
      return;
    }
    console.log(`Found District: ${district.name} (${district.id})`);

    // 2. Find a DD-AM user
    // The role code might be 'DD AM' or 'DD-AM' based on constants
    const user = await db.User.findOne({
      where: {
        [db.Sequelize.Op.or]: [
          { roleCode: 'DD AM' },
          { roleCode: 'DD-AM' }
        ],
        isActive: true
      }
    });

    if (!user) {
      console.log('No active DD-AM user found');
      return;
    }
    console.log(`Found DD-AM User: ${user.fullName} (${user.id})`);

    // 3. Create/Update UserRole mapping
    const [userRole, created] = await db.UserRole.findOrCreate({
      where: {
        userId: user.id,
        districtId: district.id,
        isActive: true
      },
      defaults: {
        roleId: (await db.Role.findOne({ where: { roleCode: user.roleCode } })).id,
        isPrimary: true,
        isActive: true
      }
    });

    if (created) {
      console.log('Created new UserRole assignment');
    } else {
      console.log('UserRole assignment already exists');
    }

    // 4. Sync Location Managers
    await syncLocationManagers(district.id);
    console.log('Sync completed');

    process.exit(0);
  } catch (error) {
    console.error('Error:', error);
    process.exit(1);
  }
}

run();
