import { useAppConfig } from '@vben/hooks';
import { defaultResponseInterceptor, RequestClient } from '@vben/request';

import { useTokenStore } from '#/store';

const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);

function createCDCMRequestClient(baseURL, options) {
  const client = new RequestClient({
    ...options,
    baseURL,
  });

  client.addResponseInterceptor(
    defaultResponseInterceptor({
      codeField: 'code',
      dataField: 'data',
      successCode: 0,
    }),
  );

  // 响应拦截器：自动更新 token
  client.addResponseInterceptor({
    fulfilled: (response) => {
      const token = response.headers?.token;
      if (token) {
        // 如果响应头中有新 token，自动更新 store
        useTokenStore().setToken(token);
      }
      return response;
    },
    rejected: (error) => {
      // 统一错误处理（如 token 过期）
      if (error.response?.status === 401) {
        useTokenStore().deleteToken();
        // 这里要跳登录页面
      }
      return Promise.reject(error);
    },
  });

  // 请求拦截器：自动添加 token
  client.addRequestInterceptor({
    fulfilled: (config) => {
      const token = useTokenStore().token;
      if (token) {
        // 添加 CDCM 自定义头部
        config.headers.set('cdcm', token, true);
      }
      return config;
    },
    rejected: (error) => {
      // 请求错误处理
      return Promise.reject(error);
    },
  });
  return client;
}

export const cdcmRequestClient = createCDCMRequestClient(apiURL);
