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

import { Container } from "typescript-ioc";

/**
 * 非标配置
 */
export type Config = {
    /**
     * 基础配置
     */
    basic?: BasicConfig;

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

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

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

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

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

    /**
     * 车场镜像knex配置
     */
    parkImageKnex?: any;
}

/**
 * 项目基础配置
 */
export type BasicConfig = {
    /**
     * ali-oss上传文件目录使用等
     */
    tapdId: any;
}

/**
 * 国际化配置
 */
export type GlobalConfig = {
    /**
     * 是否启用国际化
     */
    enabled: boolean;
}

/**
 * 统一接口配置接口
 */
export type TyApiConfig = {
    /**
     * 统一接口根地址
     * 
     * 默认根据环境自动配置
     */
    baseUrl?: string;

    /**
     * 请求超时时间(毫秒)
     * 
     * 默认为10s
     */
    timeout?: number;

    appId: string;
    appSecret: string;

    /**
     * 是否记录API调用日志(axios没有异常)
     * 
     * 默认为true
     */
    isLog?: boolean;
}

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

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

/**
 * 本地ioc配置provider
 */
export class IocConfigProvider {
    /**
     * Container.getValue('config.basic')
     */
    static getBasicConfig(): BasicConfig {
        return Container.getValue('config.basic');
    }

    /**
     * Container.getValue('config.tyApi')
     */
    static getTyApiConfig(): TyApiConfig {
        return Container.getValue('config.tyApi');
    }

    /**
     * Container.getValue('config.global')
     */
    static getGlobalConfig(): GlobalConfig {
        return Container.getValue('config.global');
    }

    /**
     * Container.getValue('config.nonStandardApi')
     */
    static getNonStandardApiConfig(): NonStandardApiConfig {
        return Container.getValue('config.nonStandardApi');
    }

    /**
     * Container.getValue('config.ioredis')
     */
    static getIORedisConfig() {
        return Container.getValue('config.ioredis');
    }

    /**
     * Container.getValue('config.parkImageKnex')
     */
    static getParkImageKnexConfig() {
        return Container.getValue('config.parkImageKnex');
    }
}