import { notFound } from "next/navigation"
import FormShell from "@/components/app/FormShell"
import PageHeader from "@/components/app/PageHeader"
import PageShell from "@/components/app/PageShell"
import { Button } from "@/components/ui/button"
import EmployeeForm from "@/features/employees/components/EmployeeForm"
import { getEmployeeById, listBranches, listLeaveTypes, listShifts } from "@/features/employees/service"
import { getCountryConfig } from "@/lib/shared/country"

interface EditEmployeePageProps {
  params: Promise<{ id: string }>
}

export default async function EditEmployeePage({ params }: EditEmployeePageProps) {
  const { id } = await params

  const [employee, branches, shifts, leaveTypes, countryConfig] = await Promise.all([
    getEmployeeById(id),
    listBranches(),
    listShifts(),
    listLeaveTypes(),
    getCountryConfig(),
  ])

  if (!employee) notFound()

  const initialData = {
    id: employee.id,
    fullName: employee.fullName,
    dob: employee.dob ?? undefined,
    joiningDate: employee.joiningDate ?? undefined,
    email: employee.email ?? undefined,
    phone: employee.phone ?? undefined,
    civilId: employee.civilId ?? undefined,
    nationality: employee.nationality ?? undefined,
    address: employee.address ?? undefined,
    position: employee.position ?? undefined, 
    zktecoId: employee.zktecoId ?? undefined, 
    description: employee.description ?? undefined,
    departmentId: employee.departmentId ?? undefined,
    subDepartmentId: employee.subDepartmentId ?? undefined,
    branchId: employee.branchId ?? undefined,
    reportingManagerId: employee.reportingManagerId ?? undefined,
    shifts: employee.shifts.map((s: { shiftId: string; effectiveFrom?: Date | null }) => ({
      shiftId: s.shiftId,
      effectiveFrom: s.effectiveFrom ?? undefined,
    })),
    document: employee.document
      ? {
          civilIdExpiry: employee.document.civilIdExpiry ?? undefined,
          passportNumber: employee.document.passportNumber ?? undefined,
          passportExpiry: employee.document.passportExpiry ?? undefined,
        }
      : undefined,
    salaryComponents: employee.salaryComponents.map((c: { category: string; amount: number }) => ({
      category: c.category,
      amount: c.amount,
    })),
    leaveAllowance: employee.leaveAllowance
      ? { annualDays: employee.leaveAllowance.annualDays, sickDays: employee.leaveAllowance.sickDays }
      : undefined,
    leaveAllowances: employee.leaveAllowances.map(
      (l: { leaveTypeId: string; days: number; leaveType?: { name: string } | null }) => ({
        leaveTypeId: l.leaveTypeId,
        leaveTypeName: l.leaveType?.name,
        days: l.days,
      })
    ),
    createUser: Boolean(employee.userId),
    avatarUrl: employee.avatarUrl ?? undefined,
  }

  return (
    <PageShell>
      <PageHeader
        title="Edit Employee"
        actions={
          <Button asChild variant="secondary">
            <a href="/employees">Back</a>
          </Button>
        }
      />
      <FormShell>
        <EmployeeForm
          initialData={initialData}
          branches={branches}
          shifts={shifts}
          leaveTypes={leaveTypes}
          hasUserAccount={Boolean(employee.userId)}
          currencyCode={countryConfig.currencyCode}
          decimalPlaces={countryConfig.decimalPlaces}
        />
      </FormShell>
    </PageShell>
  )
}