import axios from 'axios';

// 환경 변수에서 API URL을 가져오거나 기본값 사용
// const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3030';
const API_URL = '';

// axios 인스턴스 생성
const apiClient = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
  },
  withCredentials: true,
  timeout: 10000
});

// 요청 인터셉터 - 토큰 추가
apiClient.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 응답 인터셉터 - 에러 처리
apiClient.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    // 401 에러 (인증 실패) 처리
    if (error.response && error.response.status === 401) {
      // 로컬 스토리지에서 토큰 제거
      localStorage.removeItem('token');
      localStorage.removeItem('user');
      
      // 현재 페이지가 이미 로그인 페이지가 아닌 경우에만 리디렉션
      const currentPath = window.location.pathname;
      if (currentPath !== '/login') {
        // 로그인 페이지로 리디렉션
        window.location.href = '/login';
      }
    }
    
    // 403 에러 (권한 없음) 처리
    if (error.response && error.response.status === 403) {
      // 구독 관련 오류 메시지인지 확인
      const errorMessage = error.response.data?.error || '';
      if (errorMessage.includes('기능을 사용할 수 없습니다') || 
          errorMessage.includes('권한이 없습니다')) {
        
        // 사용자에게 구독 안내 표시
        import('primevue/usetoast').then(({ useToast }) => {
          const toast = useToast();
          toast.add({
            severity: 'warn',
            summary: '권한 없음',
            detail: '해당 기능을 사용하려면 구독이 필요합니다. 구독 페이지로 이동합니다.',
            life: 5000
          });
        });
        
        // 3초 후 구독 페이지로 이동
        setTimeout(() => {
          const clubId = localStorage.getItem('clubId');
          window.location.href = `/club/subscription`;
        }, 3000);
      }
    }
    
    return Promise.reject(error);
  }
);

export default apiClient;
