import axios from 'axios';

const request = axios.create({ withCredentials: false });

request.interceptors.response.use((response) => {
  const { data } = response;
  if (data.redirectURL) {
    return data;
  }

  if (data.code !== 0) {
    return Promise.reject(data);
  }

  if (
    data.code === 0 &&
    data.data &&
    data.data.error &&
    data.data.error.length
  ) {
    return Promise.reject(data);
  }

  return data.data;
}, Promise.reject);

const tokenInit = (config: any, token: string) => {
  config.headers['token'] = token;
  return config;
};

let interceptorId: number;

export const initRequestToken = (token: string | undefined | null) => {
  if (!token) {
    return;
  }
  interceptorId !== undefined &&
    request.interceptors.request.eject(interceptorId);

  interceptorId = request.interceptors.request.use((config) =>
    tokenInit(config, token),
  );
};

export const getAppInfo = (appkey: string) => {
  return request.get(`${window.origin || ''}/api/account/oauth/clintInfo`, {
    params: {
      appkey,
    },
  });
};

export const optAutoApproveState = (appKey: string, type?: number) => {
  return request.get(`${window.origin || ''}/api/account/getTime`, {
    params: { type, appKey },
  });
};

export const logout = () =>
  request.post(`${window.origin}/account`, {
    method: 'logout',
    params: [],
  });
