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

import { Container } from "typescript-ioc";

/**
 * 配置接口
 */
export interface Config {
    basic: BasicConfig;
    tyApi: TYApiConfig;
    nonStandardApi?: NonStandardApiConfig;

    /**
     * 数据湖presto-client配置，配置参考presto-client插件
     */
    dataLakePrestoClient?: any;

    /**
     * 车场镜像knex配置，配置参考knex插件
     */
    parkImageKnex?: any;

    /**
     * ali-oss,配置参考ali-oss插件
     */
    aliOss?: any;

    /**
     redis配置,配置参考ioredis插件
     */
    ioredis: any;
}

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

    appName?: string;
}

/**
 * 统一接口配置
 */
export interface TYApiConfig {
    /**
     * 统一接口根地址
     * 
     * 默认按照配置的node环境自动配置
     */
    baseUrl?: string;

    /**
     * 统一接口请求超时时间
     * 
     * 默认为10秒
     */
    timeout?: number;

    /**
     * appId
     */
    appId: any;

    /**
     * appSecret
     */
    appSecret: string;

    /**
     * axios请求异常处理
     * 
     * 默认将异常转为ApiError并抛出
     */
    axiosErrorHandler?: (error) => void;
}

/**
 * 非标API配置
 */
export interface NonStandardApiConfig {
    /**
     * 非标3des加解密配置
     */
    des3?: {
        key: string,
        iv: string
    }
}

/**
 * 获取所有配置
 * @returns 
 */
export function getConfig(): Config {
    return Container.getValue('config');
}

/**
 * 获取基础配置
 * @returns 
 */
export function getBasicConfig(): BasicConfig {
    return Container.getValue('config.basic');
}

/**
 * 获取统一API配置
 * @returns 
 */
export function getTYApiConfig(): TYApiConfig {
    return Container.getValue('config.tyApi');
}

/**
 * 获取非标API配置
 * @returns 
 */
export function getNonStandardApiConfig(): NonStandardApiConfig {
    return Container.getValue('config.nonStandardApi');
}

/**
 * 获取数据湖配置
 * @returns 
 */
export function getDataLakePrestoClientConfig(): any {
    return Container.getValue('config.dataLakePrestoClient');
}

/**
 * 获取镜像车场配置
 * @returns 
 */
export function getParkImageKnexConfig(): any {
    return Container.getValue('config.parkImageKnex');
}

/**
 * 获取ali-oss配置
 * @returns 
 */
export function getAliOssConfig(): any {
    return Container.getValue('config.aliOss');
}

/**
 * 获取redis配置
 * @returns 
 */
export function getIORedisConfig(): any {
    return Container.getValue('config.ioredis');
}