"use client";
import EditStaffForm from "../EditStaffForm";
import { useSearchParams } from "next/navigation";
import { useEffect, useState } from "react";
import { BASE_API_URL } from "@/config/api";
import { fetchStaffEdit } from "@/app/api/staff/actions";
import { getServerI18n } from "@/i18n";
import { useTranslation } from "react-i18next";
import { comboProp, fetchCompanyCombo } from "@/app/api/companys/actions";
import { fetchTeamCombo } from "@/app/api/team/actions";
import { fetchDepartmentCombo } from "@/app/api/departments/actions";
import { fetchPositionCombo } from "@/app/api/positions/actions";
import { fetchGradeCombo } from "@/app/api/grades/actions";
import { fetchSkillCombo } from "@/app/api/skill/actions";
import { fetchSalaryCombo } from "@/app/api/salarys/actions";
// import { Field } from "react-hook-form";

interface dataType {
  [key: string]: any;
}

interface Options {
  id: any;
  label: string;
  [key: string]: any;
}
// interface Field {
//   id: string;
//   label: string;
//   type: string;
//   value: any;
//   required?: boolean;
//   options?: comboProp[] | undefined | null;
//   readOnly?: boolean;
// }

export interface Field {
  //   subtitle: string;
  id: string;
  label: string;
  type: string;
  value?: any;
  required?: boolean;
  pattern?: string;
  message?: string;
  options?: Options[] | null;
  readOnly?: boolean;
  size?: number;
  setValue?: any[];
}

const EditStaff: React.FC = async () => {
  const searchParams = useSearchParams();
  const { t } = useTranslation();
  const idString = searchParams.get("id");
  const [id, setId] = useState(0);
  const [fieldLists, setFieldLists] = useState<Field[][]>();
  const [companyCombo, setCompanyCombo] = useState<comboProp[]>();
  const [teamCombo, setTeamCombo] = useState<comboProp[]>();
  const [departmentCombo, setDepartmentCombo] = useState<comboProp[]>();
  const [positionCombo, setPositionCombo] = useState<comboProp[]>();
  const [gradeCombo, setGradeCombo] = useState<comboProp[]>();
  const [skillCombo, setSkillCombo] = useState<comboProp[]>();
  const [salaryCombo, setSalaryCombo] = useState<comboProp[]>();
  //   const employTypeCombo = [{id: "FT", label: t("FT")}, {id: "PT", label: t("PT")}];
  const title = ["", t('Additional Info')]
  const employTypeCombo = [
    { id: "FT", label: t("FT") },
    { id: "PT", label: t("PT") },
  ];
  const keyOrder1 = [
    "staffId",
    "name",
    "company",
    "team",
    "department",
    "grade",
    "skill",
    "currentPosition",
    "salary",
    "hourlyRate",
    "employType",
    "email",
    "phone1",
    "phone2",
  ];

  const keyOrder2 = [
    "emergContactName",
    "emergContactPhone",
    "joinDate",
    "joinPosition",
    "departDate",
    "departPosition",
    "departReason",
    "remark",
  ];

  //fetch all combo
  useEffect(() => {
    fetchCompanyCombo().then((data) => {
      if (data) setCompanyCombo(data.records);
    });
    fetchTeamCombo().then((data) => {
      if (data) setTeamCombo(data.records);
    });
    fetchDepartmentCombo().then((data) => {
      if (data) setDepartmentCombo(data.records);
    });
    fetchPositionCombo().then((data) => {
      if (data) setPositionCombo(data.records);
    });
    fetchGradeCombo().then((data) => {
      if (data) setGradeCombo(data.records);
    });
    fetchSkillCombo().then((data) => {
      if (data) setSkillCombo(data.records);
    });
    fetchSalaryCombo().then((data) => {
      if (data) setSalaryCombo(data.records);
    });
  }, [searchParams]);

  useEffect(() => {
    let id = 0;
    if (idString) {
      id = parseInt(idString);
      setId(id);
    }
    fetchStaffEdit(id).then((staff) => {
      console.log(staff.data);
      const data = staff.data;
      ///////////////////// list 1 /////////////////////
      const list1 = keyOrder1
        .map((key) => {
          switch (key) {
            case "staffId":
              return {
                id: `${key}`,
                label: t(`Staff ID`),
                type: "text",
                value: data[key] ?? "",
                required: true,
              };
            case "name":
              return {
                id: `${key}`,
                label: t(`Staff Name`),
                type: "text",
                value: data[key] ?? "",
              };
            case "company":
              return {
                id: `${key}Id`,
                label: t(`Company`),
                type: "combo-Obj",
                options: companyCombo,
                value: data[key].id ?? "",
              };
            case "team":
              return {
                id: `${key}Id`,
                label: t(`Team`),
                type: "combo-Obj",
                options: teamCombo,
                value: data[key].id ?? "",
              };
            case "department":
              return {
                id: `${key}Id`,
                label: t(`Department`),
                type: "combo-Obj",
                options: departmentCombo,
                value: data[key]?.id ?? "",
                // later check
              };
            case "grade":
              return {
                id: `${key}Id`,
                label: t(`Grade`),
                type: "combo-Obj",
                options: gradeCombo,
                value: data[key] !== null ? data[key].id ?? "" : "",
              };
            case "skill":
              return {
                id: `${key}SetId`,
                label: t(`Skillset`),
                type: "combo-Obj",
                options: skillCombo,
                value: data[key] !== null ? data[key].id ?? "" : "",
              };
            case "currentPosition":
              return {
                id: `${key}Id`,
                label: t(`Current Position`),
                type: "combo-Obj",
                options: positionCombo,
                value: data[key].id ?? "",
              };
            case "salary":
              return {
                id: `salaryId`,
                label: t(`Salary Point`),
                type: "combo-Obj",
                options: salaryCombo,
                value: data[key] !== null ? data[key].id ?? "" : "",
              };
            // case "hourlyRate":
            //   return {
            //     id: `${key}`,
            //     label: t(`hourlyRate`),
            //     type: "text",
            //     value: "",
            //     // value: data[key],
            //     readOnly: true,
            //   };
            case "employType":
              return {
                id: `${key}`,
                label: t(`Employ Type`),
                type: "combo-Obj",
                options: employTypeCombo,
                value: data[key] ?? "",
              };
            case "email":
              return {
                id: `${key}`,
                label: t(`Email`),
                type: "text",
                value: data[key] ?? "",
                pattern: "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$",
                message: t("input matching format"),
              };
            case "phone1":
              return {
                id: `${key}`,
                label: t(`Phone1`),
                type: "text",
                // pattern: "^\\d{8}$",
                message: t("input correct phone no."),
                value: data[key] ?? "",
              };
            case "phone2":
              return {
                id: `${key}`,
                label: t(`Phone2`),
                type: "text",
                // pattern: "^\\d{8}$",
                message: t("input correct phone no."),
                value: data[key] ?? "",
              } as Field;
            default:
              return null;
          }
        }).filter((item): item is Field => item !== null);
        ///////////////////// list 2 /////////////////////
      const list2 = keyOrder2
        .map((key) => {
          switch (key) {
            case "emergContactName":
              return {
                id: `${key}`,
                label: t(`Emergency Contact Name`),
                type: "text",
                value: data[key] ?? "",
              } as Field;
            case "emergContactPhone":
                return {
                  id: `${key}`,
                  label: t(`Emergency Contact Phonee`),
                  type: "text",
                  // pattern: "^\\d{8}$",
                  message: t("input correct phone no."),
                  value: data[key] ?? "",
                } as Field;
            case "joinDate":
              return {
                id: `${key}`,
                label: t(`Join Date`),
                type: "multiDate",
                value: data[key] ?? "",
              } as Field;
            case "joinPosition":
              return {
                id: `${key}Id`,
                label: t(`Join Position`),
                type: "combo-Obj",
                options: positionCombo,
                value: data[key].id ?? "",
              } as Field;
            case "departDate":
              return {
                id: `${key}`,
                label: t(`Depart Date`),
                type: "multiDate",
                value: data[key] ?? "",
              } as Field;
            case "departReason":
              return {
                id: `${key}`,
                label: t(`Depart Reason`),
                type: "text",
                value: data[key] ?? "",
              } as Field;
            case "remark":
              return {
                id: `remark`,
                label: t(`Remark`),
                type: "remarks",
                value: data[key] ?? "",
              } as Field;
            default:
              return null;
          }
        }).filter((item): item is Field => item !== null);
      console.log(list2);
      console.log([list1]);
      setFieldLists([list1,list2]);
    });
  }, [companyCombo]);

  return (
    <>
    {/* {console.log(fieldLists)} */}
      <EditStaffForm Title={title} id={id} fieldLists={fieldLists as Field[][] || [[]]} />
    </>
  );
};

export default EditStaff;
