import { useApiInterceptor } from "./useApiInterceptor";

interface JobData {
  id: number | null;
  title: string;
  description: string;
  companyId: number | null;
  industryId: number | null;
  openingDate: string;
  closingDate: string;
  createdAt: string;
  updatedAt: string;
  company: Company;
  industry?: Industry;
  location: string | null;
  category?: string;
  jobType?: string;
  experienceLevel?: string;
  responsibilitiesAndDuties?: string;
  cmpanyLogoUrl?: string;
  salary: string | null;
  companyInformation?: string;
  contactInformation?: string;
  companyBranding?: string;
  benefits?: string;
  employmentTypes?: EmploymentTypes[];
  isDraft?: any;
  employmentType?: number[];
  skills?: any[];
  skillExamIds?: number[];
  loading?: boolean;
  companyName?: string;
  applicationDeadline: string;
  companyLogo: string | null;
  qualification?: {
    id: number;
    name: string;
  }[];
  workMode?: WorkMode[];
}

export const useUpdateJobPost = (jobUpdateData: JobData, id: string) => {
  return new Promise(async (resolve, reject) => {
    try {
      const formData = new FormData();

      formData.append("title", jobUpdateData.title!);
      formData.append("description", jobUpdateData.description!);
      formData.append("isDraft", jobUpdateData.isDraft!);
      formData.append("location", jobUpdateData.location!);
      formData.append("salary", jobUpdateData.salary!);
      formData.append("benefits", jobUpdateData.benefits!);
      formData.append(
        "responsibilitiesAndDuties",
        jobUpdateData.responsibilitiesAndDuties!
      );
      formData.append("companyInformation", jobUpdateData.companyInformation!);
      formData.append("contactInformation", jobUpdateData.contactInformation!);
      formData.append("companyBranding", jobUpdateData.companyBranding!);
      formData.append("closingDate", jobUpdateData.closingDate!);
      formData.append("openingDate", jobUpdateData.openingDate!);

      jobUpdateData.companyLogo !== null &&
        jobUpdateData.companyLogo !== undefined &&
        jobUpdateData.companyLogo !== "" &&
        formData.append("cmpanyLogoUrl", jobUpdateData.companyLogo!);

      // Append skillIds as an array
      jobUpdateData.skills!.forEach((type: any) => {
        formData.append("skillIds[]", type);
      });

      // Append skillExamIds as an array (only if present and not empty)
      if (jobUpdateData.skillExamIds && jobUpdateData.skillExamIds.length > 0) {
        jobUpdateData.skillExamIds.forEach((examId: any) => {
          formData.append("skillExamIds[]", examId);
        });
      }

      [jobUpdateData.qualification]!.forEach((type: any) => {
        formData.append("qualificationIds[]", type);
      });
      // Append employmentType as an array
      jobUpdateData.employmentType!.forEach((type: any) => {
        formData.append("employmentType[]", type);
      });

      jobUpdateData.workMode!.forEach((type: any) => {
        formData.append("workMode[]", type);
      });

      const response = await useApiInterceptor().put(
        `/account/job-posts?id=${id}`,
        formData,
        {
          headers: {
            "Content-Type": "multipart/form-data",
          },
        }
      );
      resolve({ resp: response.data, status: response.status });
    } catch (error) {
      console.error("Error fetching PUT API (Update Job Profile):", error);
      reject({ resp: "Failed to update job profile", status: 400 });
    }
  });
};
