package com.glxp.mipsdl.config;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.glxp.mipsdl.dao.auth.AuthLicenseDao;
import com.glxp.mipsdl.dao.system.SysHospConfigDao;
import com.glxp.mipsdl.entity.auth.AuthLicenseEntity;
import com.glxp.mipsdl.entity.system.SysHospConfigEntity;
import com.glxp.mipsdl.util.DictUtl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 读取医院配置
 */
@Slf4j
@Configuration
public class HospConfig {

    @Value("${THIRD_ID}")
    private String thirdSys;
    @Resource
    private SysHospConfigDao hospConfigDao;
    @Resource
    private AuthLicenseDao authLicenseDao;

    private static SysHospConfigEntity hospConfig;

    /**
     * 获取医院配置信息
     *
     * @return
     */
    @PostConstruct
    public SysHospConfigEntity getHospConfig() {
        if (null == hospConfig) {
            log.info("系统启动中，获取医院编码");
            SysHospConfigEntity sysHospConfig = hospConfigDao.selectOne(new LambdaQueryWrapper<SysHospConfigEntity>().eq(SysHospConfigEntity::getThirdSys, thirdSys).last("limit 1"));
            if (null != sysHospConfig) {
                hospConfig = sysHospConfig;
                DictUtl.CURRENT_HOSP_CODE = hospConfig.getCode();
                log.info("获取医院编码成功，编码信息：{}", JSONUtil.toJsonStr(hospConfig));
                return hospConfig;
            }
            log.error("获取医院编码失败，未查询到数据库配置信息，请前往UDI管理系统配置医院编码");
            return null;
        } else {
            return hospConfig;
        }
    }

    /**
     * 获取UDI管理系统配置的第三方服务的授权信息
     *
     * @return
     */
    @PostConstruct
    public AuthLicenseEntity getAuthLicense() {
        log.info("系统启动中，获取第三方服务授权信息");
        AuthLicenseEntity authLicenseEntity = authLicenseDao.selectOne(new LambdaQueryWrapper<AuthLicenseEntity>().eq(AuthLicenseEntity::getName, "第三方服务"));
        if (null != authLicenseEntity && StrUtil.isNotBlank(authLicenseEntity.getApikey()) && StrUtil.isNotBlank(authLicenseEntity.getSecretkey())) {
            log.info("获取第三方服务授权信息成功");
            return authLicenseEntity;
        }
        log.error("获取第三方服务授权信息失败，未查询到数据库配置信息，请前往UDI管理系统配置授权码等信息");
        return null;
    }

    /**
     * 获取UDI管理系统授权的第三方服务请求头，用于请求UDI管理系统鉴权
     *
     * @return
     */

    public String[] getHeaderArray() {
        List<String> headerArray = new ArrayList<>();
        headerArray.add("Content-Type");
        headerArray.add("application/json");
        AuthLicenseEntity license = getAuthLicense();
        if (null != license) {
            headerArray.add("api_key");
            headerArray.add(license.getApikey());
            headerArray.add("secret_key");
            headerArray.add(license.getSecretkey());
        }
        return headerArray.toArray(new String[0]);
    }


}
