import axios, { AxiosError } from "axios";
import { session } from "@/lib/auth/session";

export const API_BASE_URL =
  process.env.NEXT_PUBLIC_API_BASE_URL ??
  "https://api.backers.algobrix.com/wp-json";

export const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 15000,
  headers: { "Content-Type": "application/json", Accept: "application/json" },
});

apiClient.interceptors.request.use((config) => {
  const token = session.get()?.token;
  if (token) {
    config.headers.set("Authorization", `Bearer ${token}`);
  }
  return config;
});

export type ApiError = {
  message: string;
  status?: number;
  data?: unknown;
};

apiClient.interceptors.response.use(
  (res) => res,
  (err: AxiosError<{ message?: string; error?: string }>) => {
    const apiError: ApiError = {
      message:
        err.response?.data?.message ||
        err.response?.data?.error ||
        err.message ||
        "Something went wrong",
      status: err.response?.status,
      data: err.response?.data,
    };
    return Promise.reject(apiError);
  }
);
