// src/services/api.ts
import axios from "axios";
import { toast } from "react-toastify";

// API base URL is loaded from .env file (REACT_APP_API_BASE_URL)
// Example: REACT_APP_API_BASE_URL=http://localhost:5000/api
const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || "";

if (!API_BASE_URL) {
  console.warn("REACT_APP_API_BASE_URL is not set in .env file");
}

// Create axios instance with base URL from environment variable
const api = axios.create({
  baseURL: API_BASE_URL,
  headers: {
    "Content-Type": "application/json",
  },
});

// Request interceptor — attaches token automatically
api.interceptors.request.use(
  (config) => {
    try {
      const token = localStorage.getItem("token");
      if (token && config && config.headers) {
        config.headers.Authorization = `Bearer ${token}`;
      }
      // If data is FormData, remove Content-Type header to let browser set it with boundary
      if (config.data instanceof FormData) {
        delete config.headers['Content-Type'];
      }
    } catch (e) {
      console.error(e);
    }
    return config;
  },
  (error) => Promise.reject(error)
);


api.interceptors.response.use(
  (response) => {
    try {
      const newToken = response.headers["x-refresh-token"];
      if (typeof newToken === 'string') {
        localStorage.setItem("token", newToken);
      }
    } catch (e) {
      console.error('Error handling token refresh:', e);
    }
    return response;
  },
  (error) => {
    try {
      if (error.response && error.response.status === 401) {
        const token = localStorage.getItem("token");
        const currentPath = window.location.pathname;
        if (token && currentPath !== "/login") {
          localStorage.removeItem("token");
          localStorage.removeItem("user");
  
          toast.info("Session expired. Please login again.");
        }
      }
    } catch (e) {
      console.error('Error handling 401 response:', e);
    }
    return Promise.reject(error);
  }
);

export default api;
