/**
 * 共享库配置模块
 * @date 2022-03
 * @author 何华东
 */

import { AxiosInstance, AxiosResponse } from 'axios';

export interface Config {
    basic: BasicConfig;

    /**
     * 国际化配置
     */
    global?: GlobalConfig;

    /**
     * 统一接口配置接口
     */
    tyApi: TyApiConfig;

    /**
     * 非标接口配置
     */
    nonStandardApi?: NonStandardApiConfig;

    /**
     * cron定时任务配置
     */
    cron?: CronConfig;

    /**
     * ioredis配置
     */
    ioredis?: any;

    /**
     * ali-oss配置
     */
    aliOss?: any;

    /**
     * 车场镜像knex配置,参考knex/mysql
     */
    parkImageKnex?: any;
}

/**
 * 基础配置
 */
export interface BasicConfig {
    tapdId: any;
}

export interface GlobalConfig {
    /**
     * 国际化方式
     * 
     * cloud表示云端国际化，从云端redis加载语言包，非私有化部署中台项目
     * 
     * park表示场端国际化，从场端redis加载语言包
     * 
     * 云端、场端redis存储语言包使用的hash key、field是不一样的
     */
    mode: 'cloud' | 'park';
}

/**
 * 统一接口配置接口
 */
export interface TyApiConfig {
    /**
     * 统一接口根地址
     */
    baseURL?: string;

    /**
     * 请求超时时间(毫秒)
     */
    timeout?: number;
    appId: string;
    appSecret: string;

    /**
     * axios异常处理
     */
    axiosErrorHandler?: (error: any) => any;

    /**
     * axios响应处理
     */
    axiosResponseHandler?: (response: AxiosResponse<any>) => AxiosResponse<any> | Promise<AxiosResponse<any>>
}

/**
 * 非标接口配置
 */
export interface NonStandardApiConfig {
    /**
     * 3des加密key
     */
    key: string;

    /**
     * 3des加密偏移量
     */
    iv: any;

    /**
     * 是否启用加解密
     */
    secure: boolean;
}

/**
 * cron定时任务配置
 */
export interface CronConfig {
    /**
     * 是否启用定时任务
     */
    enabled?: boolean;
}