import { UseAccessToken } from "@/utils/conditions/getAccessToken";
import axios, { AxiosInstance } from "axios";
const baseURL = process.env.NEXT_PUBLIC_API_BASE_URL;

type AccessToken = string | null | undefined;
type ID = any;
type STATE_CODE = any;
type PORT_ID = any;
function getAxiosClient(access_token: AccessToken) {
  const client = axios.create({
    baseURL: baseURL,
  });

  client.interceptors.request.use((config) => {
    config.headers["Content-Type"] = "multipart/form-data";
    config.headers["Accept"] = "application/json";
    if (access_token) {
      config.headers["Authorization"] = `Bearer ${access_token}`;
    }
    return config;
  });

  return client;
}

async function makeGetRequest(client: AxiosInstance, endpoint: string) {
  try {
    const response = await client.get(endpoint);
    return response.data;
  } catch (error: any) {
    return {
      ...error?.response?.data,
      status_code: error?.response?.status,
    };
  }
}

export async function UpdateCordinates(
  access_token: AccessToken,
  state_code: STATE_CODE,
  port_id: PORT_ID,
) {
  const accessToken = await UseAccessToken();
  const client = getAxiosClient(accessToken);
  return makeGetRequest(
    client,
    `draydex_rms_api/public/api/v1/carriers?service_state=${state_code}&port_id=${port_id}`,
  );
}
export async function UpdateCordinatesports(
  access_token: AccessToken,
  port_id: PORT_ID,
) {
  const accessToken = await UseAccessToken();
  const client = getAxiosClient(accessToken);
  return makeGetRequest(
    client,
    `draydex_rms_api/public/api/v1/carriers?port_id=${port_id}`,
  );
}
export async function UpdateCordinatesstates(
  access_token: AccessToken,
  state_code: STATE_CODE,
) {
  const accessToken = await UseAccessToken();
  const client = getAxiosClient(accessToken);
  return makeGetRequest(
    client,
    `draydex_rms_api/public/api/v1/carriers?state_code=${state_code}`,
  );
}
export async function UpdateCarrierTable(
  access_token: AccessToken,
  state_code: STATE_CODE,
  port_id: PORT_ID,
) {
  const accessToken = await UseAccessToken();
  const client = getAxiosClient(accessToken);
  return makeGetRequest(
    client,
    `draydex_rms_api/public/api/v1/carriers/records?service_state=${state_code}&port_id=${port_id}`,
  );
}

export async function getFuelPrice(access_token: AccessToken) {
  const accessToken = await UseAccessToken();
  const client = getAxiosClient(accessToken);
  return makeGetRequest(
    client,
    `${process?.env?.NEXT_PUBLIC_NEXT_PUBLIC_API}api/v1/carriers/diesel-price`,
  );
}

export async function getCustomerAddtionalContact(token: any, id: any) {
  try {
    const client = getAxiosClient(token);
    const response = await client.get(
      `${process?.env?.NEXT_PUBLIC_NEXT_PUBLIC_API}api/v1/customers/get-contact/${id}`,
    );
    return response.data;
  } catch (error: any) {
    return {
      ...error.response?.data,
      status_code: error.response?.status,
    };
  }
}
