import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';

const prisma = new PrismaClient();

async function main() {
  const teamId = 'team-platform-uuid-0001';
  const now = new Date();

  const mgr = await prisma.employees.upsert({
    where: { employee_id: 'GTPL-MGR' },
    update: { name: 'Alice Manager', email: 'alice@gventure.net', status: 'active', earned_leave: 5, casual_leave: 3, updated_at: now },
    create: {
      employee_id: 'GTPL-MGR',
      name: 'Alice Manager',
      email: 'alice@gventure.net',
      status: 'active',
      earned_leave: 5,
      casual_leave: 3,
      updated_at: now,
    },
  });

  const bob = await prisma.employees.upsert({
    where: { employee_id: 'GTPL-BOB' },
    update: { name: 'Bob Member', email: 'bob@gventure.net', status: 'active', earned_leave: 5, casual_leave: 3, updated_at: now },
    create: {
      employee_id: 'GTPL-BOB',
      name: 'Bob Member',
      email: 'bob@gventure.net',
      status: 'active',
      earned_leave: 5,
      casual_leave: 3,
      updated_at: now,
    },
  });

  const car = await prisma.employees.upsert({
    where: { employee_id: 'GTPL-CAR' },
    update: { name: 'Carol Member', email: 'carol@gventure.net', status: 'active', earned_leave: 4, casual_leave: 4, updated_at: now },
    create: {
      employee_id: 'GTPL-CAR',
      name: 'Carol Member',
      email: 'carol@gventure.net',
      status: 'active',
      earned_leave: 4,
      casual_leave: 4,
      updated_at: now,
    },
  });

  await prisma.l10_teams.upsert({
    where: { id: teamId },
    update: { name: 'Platform', lead_employee_id: String(mgr.id), active: true, updated_at: now },
    create: {
      id: teamId,
      name: 'Platform',
      lead_employee_id: String(mgr.id),
      meeting_day_of_week: 2,
      meeting_time: '10:00',
      active: true,
      created_by_user_id: '00000000-0000-0000-0000-000000000001',
      created_at: now,
      updated_at: now,
    },
  });

  for (const [emp, role] of [[mgr, 'lead'], [bob, 'member'], [car, 'member']] as const) {
    await prisma.l10_team_members.upsert({
      where: { team_id_employee_id: { team_id: teamId, employee_id: String(emp.id) } },
      update: { role },
      create: { team_id: teamId, employee_id: String(emp.id), role },
    });
  }

  const hash = await bcrypt.hash('hr-admin-pass', 10);
  await prisma.hr_users.upsert({
    where: { username: 'hr.admin' },
    update: {},
    create: {
      username: 'hr.admin',
      email: 'hr@gventure.net',
      password_hash: hash,
      role: 'hr',
    },
  });

  const { EmployeeSettingsService } = await import('../src/services/EmployeeSettingsService');
  const employeeSettings = new EmployeeSettingsService();
  const autoLeaders = await employeeSettings.applyDefaultAutoWeekdayLeaders('seed');
  if (autoLeaders.applied.length > 0) {
    console.log('Auto Mon–Fri attendance enabled for:', autoLeaders.applied.map((e) => e.name).join(', '));
  }

  console.log('Seed complete: Platform team GTPL-MGR, GTPL-BOB, GTPL-CAR');
}

main()
  .catch(console.error)
  .finally(() => prisma.$disconnect());
