"use client";

import axios from "axios";
import { getSession } from "next-auth/react";

const apiClient = axios.create({
  baseURL: process.env.NEXT_PUBLIC_API_URL,
});

// Request interceptor to add auth token
apiClient.interceptors.request.use(
  async (config) => {
    const session = await getSession();
    if (session?.accessToken) {
      config.headers.Authorization = `Bearer ${session.accessToken}`;
    }
    const deviceToken = typeof window !== "undefined" ? localStorage.getItem("fcmToken") : null;
    if (deviceToken) {
      config.headers.deviceToken = deviceToken;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// Response interceptor for maintenance mode
apiClient.interceptors.response.use(
  (response: any) => {
    // Check for maintenance mode in response data
    const responseData = response?.data;
    const isMaintenanceMode =
      responseData?.data?.maintenanceMode === true ||
      responseData?.maintenanceMode === true;
    const maintenanceMessage = responseData?.message;

    if (isMaintenanceMode) {
      if (typeof window !== "undefined") {
        const currentPath = window.location.pathname;
        if (!currentPath.startsWith("/under-maintenance")) {
          // Store message in sessionStorage to pass to the page
          if (maintenanceMessage) {
            sessionStorage.setItem("maintenanceMessage", maintenanceMessage);
          }
          window.location.href = "/under-maintenance";
        }
      }
    }

    return response;
  },
  (error: any) => {
    // Check for maintenance mode in error response data
    const errorData = error?.response?.data;
    const isMaintenanceMode =
      errorData?.data?.maintenanceMode === true ||
      errorData?.maintenanceMode === true;
    const maintenanceMessage = errorData?.message;

    if (isMaintenanceMode) {
      if (typeof window !== "undefined") {
        const currentPath = window.location.pathname;
        if (!currentPath.startsWith("/under-maintenance")) {
          // Store message in sessionStorage to pass to the page
          if (maintenanceMessage) {
            sessionStorage.setItem("maintenanceMessage", maintenanceMessage);
          }
          window.location.href = "/under-maintenance";
        }
      }
    }

    return Promise.reject(error);
  }
);

export default apiClient;
