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

type AccessToken = string | null | undefined;
type 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 getRateQuotesdetails(access_token: AccessToken, id: ID) {
  const client = getAxiosClient(access_token);
  return makeGetRequest(
    client,
    `draydex_rms_api/public/api/v1/drayage-quote-details/${id}`,
  );
}
export async function getRateQuotess(access_token: AccessToken) {
  const client = getAxiosClient(access_token);
  const STAGING_PATH = process.env.NEXT_STAGING_DIR_PATH || '';
  return makeGetRequest(
    client,
    `${STAGING_PATH}/api/v1/get-drayage-quotes`,
  );
}
export const GetQuotes = async () => {
  try {
    return await client?.get("/get-drayage-quotes");
  } catch (err) {
    return err;
  }
};
