package com.simuwang.base.common.util;

import cn.hutool.core.util.StrUtil;
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class NavDataUtil {

    private static final Logger log = LoggerFactory.getLogger(NavDataUtil.class);

    public static boolean navDataFormatCheck(EmailFundNavDTO fundNavDTO) {
        // 净值日期格式校验
        if (StrUtil.isBlank(fundNavDTO.getPriceDate())) {
            log.warn("净值日期为空 -> 数据:{}", fundNavDTO);
            return false;
        }
        if (StrUtil.isBlank(fundNavDTO.getFundName()) && StrUtil.isBlank(fundNavDTO.getRegisterNumber())) {
            log.warn("备案编码和基金名称都为空-> 数据:{}", fundNavDTO);
            return false;
        }
        if (StrUtil.isNotBlank(fundNavDTO.getFundName()) && fundNavDTO.getFundName().length() > 110) {
            log.warn("基金名称长度超出限制(110个字符)-> 数据:{}", fundNavDTO);
            return false;
        }
        if (StrUtil.isNotBlank(fundNavDTO.getRegisterNumber()) && fundNavDTO.getRegisterNumber().length() > 12) {
            log.warn("备案编码长度超出限制(12个字符)-> 数据:{}", fundNavDTO);
            return false;
        }
        // 单位净值,累计单位净值,资产净值,资产份额数字格式校验
        boolean isvalidNumericFormat = (StrUtil.isBlank(fundNavDTO.getNav()) || StringUtil.isNumeric(fundNavDTO.getNav()))
                && (StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal()) || StringUtil.isNumeric(fundNavDTO.getCumulativeNavWithdrawal()))
                && (StrUtil.isBlank(fundNavDTO.getAssetNet()) || StringUtil.isNumeric(fundNavDTO.getAssetNet()))
                && (StrUtil.isBlank(fundNavDTO.getAssetShare()) || StringUtil.isNumeric(fundNavDTO.getAssetShare()));
        if (!isvalidNumericFormat) {
            log.warn("单位净值或累计净值或资产净值或资产份额格式不正确 -> 数据:{}", fundNavDTO);
            return false;
        }
        log.info("数据格式验证通过 -> {}", fundNavDTO);
        return true;
    }

    public static String checkDataFailReason(EmailFundNavDTO fundNavDTO) {
        // 净值日期格式校验
        if (StrUtil.isBlank(fundNavDTO.getPriceDate())) {
            return "净值日期为空";
        }
        if (StrUtil.isBlank(fundNavDTO.getFundName()) && StrUtil.isBlank(fundNavDTO.getRegisterNumber())) {
            return "备案编码和基金名称都为空";
        }
        if(StrUtil.isBlank(fundNavDTO.getNav()) && StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal()) && StrUtil.isBlank(fundNavDTO.getAssetNet())){
            return "单位净值、累计净值、资产净值都为空";
        }
        // 单位净值,累计单位净值,资产净值,资产份额数字格式校验
        boolean isvalidNumericFormat = (StrUtil.isBlank(fundNavDTO.getNav()) || StringUtil.isNumeric(fundNavDTO.getNav()))
                && (StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal()) || StringUtil.isNumeric(fundNavDTO.getCumulativeNavWithdrawal()))
                && (StrUtil.isBlank(fundNavDTO.getAssetNet()) || StringUtil.isNumeric(fundNavDTO.getAssetNet()))
                && (StrUtil.isBlank(fundNavDTO.getAssetShare()) || StringUtil.isNumeric(fundNavDTO.getAssetShare()));
        if (!isvalidNumericFormat) {
            return "单位净值或累计净值或资产净值或资产份额格式不正确";
        }
        return null;
    }
}
