import axios, {
  AxiosInstance,
  AxiosResponse,
  InternalAxiosRequestConfig,
} from "axios";
import { toast } from "sonner";
import { progress } from "./loading-controller";

// Axios instance configuration
export const apiClient: AxiosInstance = axios.create({
  baseURL: process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001', // Replace with your API base URL
});

// Interceptors
apiClient.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  if (typeof window !== "undefined") {
    const rawToken = localStorage.getItem("token");
    if (rawToken) {
      const cleanToken = rawToken.replace(/^"|"$/g, "");
      config.headers["Authorization"] = `Bearer ${cleanToken}`;
      config.headers["token"] = cleanToken;
    }
  }
  progress.start();
  return config;
});

apiClient.interceptors.response.use(
  (response: AxiosResponse) => {
    progress.finish();
    if (response?.data?.success !== true) {
      toast.error(response?.data?.message || "internal server error");
      return Promise.reject(response?.data?.message);
    }
    return response; // always returns
  },
  (error) => {
    progress.finish();
    // if (
    //   error?.response?.data.error ||
    //   error?.response?.data?.message ||
    //   error?.message
    // ) {
    //   toast?.error(
    //     error?.response?.data.error ||
    //     error?.response?.data?.message ||
    //     error?.message ||
    //     "internal server error"
    //   );
    // }
    console.log("API Error:", error?.response?.data || error?.message);
    return Promise.reject(error);
  }
);

export default apiClient;
