import axios from 'axios';
import { getApiBaseUrl } from './apiBase';

// 개발: Vite 프록시 /api → localhost:4000
// 사설망 IP 접속: 자동으로 같은 IP:4000 백엔드
// Vercel 배포: Render API (VITE_API_URL로 오버라이드 가능)
const baseURL = getApiBaseUrl();

export const apiClient = axios.create({
  baseURL,
  headers: {
    'Content-Type': 'application/json',
  },
});

export function fileViewUrl(fileId: string): string {
  return `${baseURL}/files/${fileId}/view`;
}

export function fileDownloadUrl(fileId: string): string {
  return `${baseURL}/files/${fileId}/download`;
}

export function fileHwpPreviewUrl(fileId: string): string {
  return `${baseURL}/files/${fileId}/hwp-preview`;
}

apiClient.interceptors.request.use((config) => {
  if (config.data instanceof FormData) {
    delete config.headers['Content-Type'];
  }
  return config;
});

apiClient.interceptors.response.use(
  (res) => res,
  (error) => Promise.reject(error),
);

export function getApiErrorMessage(err: unknown, fallback: string): string {
  const ax = err as {
    response?: { data?: { message?: string }; status?: number };
    message?: string;
    code?: string;
  };
  if (ax.response?.data?.message) return ax.response.data.message;
  if (!ax.response && (ax.code === 'ERR_NETWORK' || ax.message?.includes('Network Error'))) {
    return '서버에 연결할 수 없습니다. 서버 PC에서 서버시작.bat 이 실행 중인지 확인해 주세요.';
  }
  return ax.message || fallback;
}
