import axios from "axios";
import { baseURL } from "./endpoints";
import { useLoaderStore } from "../store/loaderStore";

const axiosInstance = axios.create({
  baseURL,
  timeout: 30000,
  headers: {
    "X-Platform": "web",
  },
});

/* ============================
   🔹 REQUEST INTERCEPTOR
============================ */
axiosInstance.interceptors.request.use(
  (config) => {
    // ── Loader ON ──
    if (!config.headers?.["X-Skip-Loader"]) {
      useLoaderStore.getState().show();
    }

    if (typeof window !== "undefined") {
      const token = localStorage.getItem("token");
      if (token) {
        config.headers.Authorization = `Bearer ${token}`;
      }
    }
    console.log(baseURL);
    return config;
  },
  (error) => {
    // ── Loader OFF (request setup mate j fail thayu) ──
    useLoaderStore.getState().hide();
    return Promise.reject(error);
  }
);

/* ============================
   🔹 RESPONSE INTERCEPTOR
============================ */
axiosInstance.interceptors.response.use(
  (response) => {
    // ── Loader OFF (success) ──
    if (!response.config.headers?.["X-Skip-Loader"]) {
      useLoaderStore.getState().hide();
    }
    return response;
  },
  (error) => {
    // ── Loader OFF (error) ──
    if (!error.config?.headers?.["X-Skip-Loader"]) {
      useLoaderStore.getState().hide();
    }

    if (typeof window !== "undefined") {
      // 401 Unauthorized handle karva mate
      if (error?.response?.status === 401) {
        console.warn("Unauthorized → Logging out");

        localStorage.removeItem("token");
        localStorage.removeItem("user");

        document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
        document.cookie = "user_type=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

        window.location.href = "/login";
      }
    }

    return Promise.reject(error);
  }
);

export default axiosInstance;