/*
 * @Author: Kane
 * @Date: 2023-06-12 14:48:55
 * @LastEditors: Kane
 * @FilePath: /task_schedule/src/utils/api/loginRequest.ts
 * @Description:
 *
 * Copyright (c) ${2022} by Kane, All Rights Reserved.
 */
import axios, { type AxiosInstance } from "axios";

const loginInstance: AxiosInstance = axios.create(
    {
        baseURL: "",
        timeout: 10000,
    }
);

// 拦截器

// 登录用的请求，不需要加上token。
loginInstance.interceptors.request.use(
    /**
     * 请求拦截方法，用于对请求参数和内容进行预处理。
     * 因为是登录请求，所以不需要加入token。
     * @param config axios传递的配置对象
     * @returns 返回给axios的配置对象
     */
    ( config ) =>
    {
        return config;
    },
    /**
     * 请求拦截，当请求发送失败时调用。
     * @param reason axios 传递的对象
     * @returns 返回一个Promise对象，提供给调用者。
     */
    async ( reason ) =>
    {
        return await Promise.reject( reason );
    });

// 响应拦截器
loginInstance.interceptors.response.use(
    /**
     * 响应成功后调用，用于对响应结果进行预处理
     * @param response axios传递的响应结果
     * @returns 返回预处理后的响应结果，这里返回的结果，会传递给用户用户提供的响应处理结果方法。
     */
    ( response ) =>
    {
        return response;
    },
    /**
     * 请求调用结果不为2xx时被调用。用于对错误进行预处理。
     * @param error axios传递的错误内容。
     * @returns 返回预处理后的错误信息对象，会传递给用户提供的相应处理方法。
     */
    async ( error ) =>
    {
        return await Promise.reject( error );
    });

export { loginInstance as instance };
