import { UseAccessToken } from "@/utils/conditions/getAccessToken";
import { getAxiosClient } from "./client";

type AccessToken = string | null | undefined;

/* This function is used to get bulk import list */
export async function bulkFileListing(queryDataObj: any) {
    try {
        const accessToken: AccessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        let endpointURL: any;
        if(queryDataObj?.pageno === undefined){
            endpointURL = '/api/v1/bulk/file/listing';
        }else{
            endpointURL = `/api/v1/bulk/file/listing?page=${queryDataObj?.pageno}&paginate_count=${queryDataObj?.paginate_count}`;
        }
        const response = await client.get(endpointURL);
        return response.data;
    } catch (error: any) {
        return {
            ...error?.response?.data,
            status_code: error?.response?.status,
        };
    }
}

/* This function is used to upload quote file */
export async function toUploadQuoteFile(payload: any){
    try {
      const accessToken = await UseAccessToken();
      const client = getAxiosClient(accessToken);
      const response = await client.post(
        `/api/v1/bulk/quotes/file/upload`,
        payload,
        {
          transformRequest: (data, headers) => {
            headers["Content-Type"] = "multipart/form-data";
            return data;
          },
        },
      );
      return response.data;
    } catch (error: any) {
      return {
        ...error.response?.data,
        status_code: error.response?.status,
      };
    }
}
  
/* This function is used to get sample file for quote */
export async function toGetSampleFileQuote() {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const endpoint = `/api/v1/sample/csv/quote`;
        const response = await client.get(endpoint);
        return response.data;
    } catch (error: any) {
        return {
            ...error?.response?.data,
            status_code: error?.response?.status,
        };
    }
}

/* This function is used to upload rate file */
export async function toUploadRateFile(payload: any){
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const response = await client.post(
            `/api/v1/bulk/rates/file/upload`,
            payload,
            {
                transformRequest: (data, headers) => {
                    headers["Content-Type"] = "multipart/form-data";
                    return data;
                },
            },
        );
        return response.data;
    } catch (error: any) {
        return {
            ...error.response?.data,
            status_code: error.response?.status,
        };
    }
}

/* This function is used to get sample file for rate */
export async function toGetSampleFileRate(payload: any) {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const response = await client.post(
            `/api/v1/sample/csv/rate`,
            payload,
        );
        return response.data;
    } catch (error: any) {
        return {
            ...error.response?.data,
            status_code: error.response?.status,
        };
    }
}

/* This function is used to reject bulk import file */
export async function toRejectBulkFile(payload: any) {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const response = await client.post(
            `/api/v1/bulk/upload/reject`,
            payload,
        );
        return response.data;
    } catch (error: any) {
        return {
            ...error.response?.data,
            status_code: error.response?.status,
        };
    }
}

/* This function is used to accept bulk import file */
export async function toAcceptBulkFile(payload: any) {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const response = await client.post(
            `/api/v1/bulk/upload/accept`,
            payload,
        );
        return response.data;
    } catch (error: any) {
        return {
            ...error.response?.data,
            status_code: error.response?.status,
        };
    }
}

/* This function is used to accept progress bulk import file */
export async function toAcceptProgressBulkFile(payload: any) {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const endpoint = `/api/v1/bulk/upload/progress/${payload}`;
        const response = await client.get(endpoint);
        return response.data;
    } catch (error: any) {
        return {
            ...error?.response?.data,
            status_code: error?.response?.status,
        };
    }
}

/* This function is used to accept bulk import file */
export async function toCancelBulkFile(payload: any) {
    try {
        const accessToken = await UseAccessToken();
        const client = getAxiosClient(accessToken);
        const response = await client.post(
            `/api/v1/bulk/upload/delete`,
            payload,
        );
        return response.data;
    } catch (error: any) {
        return {
            ...error.response?.data,
            status_code: error.response?.status,
        };
    }
}