import { apiGet, apiPost, axiosInstance, API_ENDPOINT } from './api';
import { AxiosResponse } from 'axios';

export const uploadLegacyDump = async (file: File, onProgress?: (percent: number) => void): Promise<AxiosResponse> => {
  const formData = new FormData();
  formData.append('sql_file', file);

  return await axiosInstance.post(`${API_ENDPOINT}/hr/data-migration/upload`, formData, {
    headers: { 'Content-Type': 'multipart/form-data' },
    onUploadProgress: (event) => {
      if (event.total && onProgress) {
        onProgress(Math.round((event.loaded / event.total) * 100));
      }
    },
  });
};

export const getImportStatus = async (): Promise<AxiosResponse> => {
  return await apiGet('/hr/data-migration/import-status');
};

export const getAnalysis = async (): Promise<AxiosResponse> => {
  return await apiGet('/hr/data-migration/analysis');
};

export const startMigration = async (options?: {
  skip_payroll?: boolean;
  skip_attendance?: boolean;
  from_date?: string;
}): Promise<AxiosResponse> => {
  return await apiPost('/hr/data-migration/start', options ?? {});
};

export const getMigrationStatus = async (): Promise<AxiosResponse> => {
  return await apiGet('/hr/data-migration/status');
};

export const getReconciliationReport = async (): Promise<AxiosResponse> => {
  return await apiGet('/hr/data-migration/report');
};

export const cleanupMigration = async (): Promise<AxiosResponse> => {
  return await apiPost('/hr/data-migration/cleanup', {});
};
