import { defHttp } from '/@/utils/http/axios'
import type { GetUserInfoModel, LoginParams, LoginResultModel } from './model/userModel'

import type { ErrorMessageMode } from '/#/axios'

enum Api {
    Login = '/auth/login',
    Logout = '/auth/logout',
    GetUserInfo = '/user/getUserInfo',
    GetPermCode = '/user/getPermCode',
    TestRetry = '/auth/testRetry',
}

/**
 * @description: user login api
 */
export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
    return defHttp.post<LoginResultModel>(
        {
            url: Api.Login,
            params,
        },
        {
            errorMessageMode: mode,
        },
    )
}

/**
 * @description: getUserInfo
 */
export function getUserInfo() {
    return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' })
}

export function getPermCode() {
    return defHttp.get<string[]>({ url: Api.GetPermCode })
}

export function doLogout() {
    return defHttp.get({ url: Api.Logout })
}

export function testRetry() {
    return defHttp.get(
        { url: Api.TestRetry },
        {
            retryRequest: {
                isOpenRetry: true,
                count: 5,
                waitTime: 1000,
            },
        },
    )
}
