/**
 * 检查数据库中的 Manager 数据
 */
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  console.log('🔍 Checking UserDepartment manager data...\n');

  // 查询所有 UserDepartment 记录
  const userDepartments = await prisma.userDepartment.findMany({
    where: { leftAt: null },
    include: {
      user: {
        select: {
          id: true,
          displayName: true,
          email: true,
        },
      },
      department: {
        select: {
          id: true,
          name: true,
        },
      },
      manager: {
        select: {
          id: true,
          displayName: true,
          email: true,
        },
      },
    },
    take: 10,
  });

  console.log(`📊 Total UserDepartment records: ${userDepartments.length}\n`);

  // 统计有 manager 的记录
  const withManager = userDepartments.filter(ud => ud.managerId);
  console.log(`✅ Records with manager: ${withManager.length}/${userDepartments.length}\n`);

  // 显示示例数据
  console.log('📋 Sample records:\n');
  userDepartments.forEach((ud, index) => {
    console.log(`${index + 1}. ${ud.user.displayName} (${ud.user.email})`);
    console.log(`   Department: ${ud.department.name}`);
    console.log(`   Manager ID: ${ud.managerId || 'NULL'}`);
    console.log(`   Manager: ${ud.manager?.displayName || 'N/A'}`);
    console.log(`   Position ID: ${ud.positionId || 'NULL'}`);
    console.log(`   Is Primary: ${ud.isPrimary}`);
    console.log('');
  });

  // 检查是否有循环引用
  console.log('🔄 Checking for circular manager relationships...\n');
  for (const ud of withManager) {
    const visited = new Set<string>([ud.userId]);
    let currentManagerId = ud.managerId;
    let depth = 0;
    let hasLoop = false;

    while (currentManagerId && depth < 10) {
      if (visited.has(currentManagerId)) {
        console.log(`⚠️  LOOP DETECTED: ${ud.user.displayName} -> ... -> ${currentManagerId}`);
        hasLoop = true;
        break;
      }

      visited.add(currentManagerId);

      const managerMembership = await prisma.userDepartment.findFirst({
        where: {
          userId: currentManagerId,
          departmentId: ud.departmentId,
          leftAt: null,
        },
      });

      currentManagerId = managerMembership?.managerId || null;
      depth++;
    }

    if (!hasLoop && depth > 3) {
      console.log(`📊 ${ud.user.displayName}: Manager chain depth = ${depth}`);
    }
  }

  console.log('\n✅ Check complete!');
}

main()
  .catch((error) => {
    console.error('❌ Error:', error);
    process.exit(1);
  })
  .finally(() => {
    prisma.$disconnect();
  });
