package com.simuwang.daq.service;

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

import java.util.List;
import java.util.Map;

public abstract class AbstractEmailParser {

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

    public boolean isSupport(Integer emailType) {
        return false;
    }

    public abstract List<EmailFundNavDTO> parse(EmailContentInfoDTO emailContentInfoDTO, Map<String, List<String>> emailFieldMap);

    public boolean dataFormat(EmailFundNavDTO fundNavDTO) {
        // 净值日期格式校验
        boolean isvalidDate = StringUtil.isValidDate(fundNavDTO.getPriceDate());
        if (!isvalidDate) {
            log.warn("净值日期格式不正确 -> 解析到的数据:{}", 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;
    }
}
