import axios, { AxiosInstance } from 'axios';
import { getSession, signOut } from 'next-auth/react';

// const MESSAGES = {
//   tr: {
//     title: 'Oturum Süresi Doldu',
//     description: 'Güvenliğiniz için çıkış yapıldı. Lütfen tekrar giriş yapınız.',
//   },
//   en: {
//     title: 'Session Expired',
//     description: 'You have been logged out for security reasons. Please log in again.',
//   },
// };

export function createApiClient(baseURL: string): AxiosInstance {
  const client = axios.create({ baseURL });

  // Helper to get locale from cookie or URL
  const getLocale = (): string => {
    if (typeof window !== 'undefined') {
      // Try to get from cookie first (NEXT_LOCALE is the default cookie name)
      const cookieLocale = document.cookie
        .split('; ')
        .find((row) => row.startsWith('NEXT_LOCALE='))
        ?.split('=')[1];

      if (cookieLocale) return cookieLocale;

      // Fallback: get from URL path (e.g., /tr/generator -> tr)
      const pathLocale = window.location.pathname.split('/')[1];
      if (['en', 'tr', 'de'].includes(pathLocale)) return pathLocale;
    }
    return 'tr'; // Default locale
  };

  client.interceptors.request.use(async (config) => {
    const session = await getSession();
    const token = session?.accessToken;

    if (token) {
      config.headers.set('Authorization', `Bearer ${token}`);
    }

    // Set Accept-Language header based on current locale
    const locale = getLocale();
    config.headers.set('Accept-Language', locale);

    if (!(config.data instanceof FormData)) {
      config.headers.set('Content-Type', 'application/json');
    }

    return config;
  });

  client.interceptors.response.use(
    (response) => {
      // Backend ResponseInterceptor tüm yanıtları { success, status, message, data } ile sarıyor.
      // GlobalExceptionFilter hataları da HTTP 200 ile dönüyor, bu yüzden success bayrağını kontrol etmeliyiz.
      if (
        response.data &&
        typeof response.data === 'object' &&
        'success' in response.data
      ) {
        if (response.data.success === false) {
          if (response.data.status === 401) {
            const isAuthPath =
              typeof window !== 'undefined' &&
              (window.location.pathname.includes('/api/auth') || window.location.pathname === '/');
            if (!isAuthPath && typeof window !== 'undefined') {
              signOut({ redirect: true, callbackUrl: '/' });
            }
          }
          return Promise.reject(new Error(response.data.message || 'Bir hata oluştu'));
        }
        if ('data' in response.data) {
          response.data = response.data.data;
        }
      }
      return response;
    },
    async (error) => {
      if (error.response?.status === 401) {
        // Zaten giriş sayfasında değilsek veya auth ile ilgili bir istek değilse çıkış yap
        const isAuthPath =
          typeof window !== 'undefined' &&
          (window.location.pathname.includes('/api/auth') || window.location.pathname === '/');

        if (!isAuthPath) {
          await signOut({ redirect: true, callbackUrl: '/' });
        }
      }
      return Promise.reject(error);
    },
  );

  return client;
}
