package com.simuwang.base.pojo.dto.report;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.simuwang.base.pojo.dos.report.BaseReportDO;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author wangzaijun
 * @date 2024/10/9 11:08
 * @description 抽象的报告数据父类，全部字段用string传递
 */
@Setter
@Getter
public abstract class BaseReportDTO<T extends BaseReportDO> {
    private Integer fileId;

    public BaseReportDTO() {
    }

    public BaseReportDTO(Integer fileId) {
        this.fileId = fileId;
    }

    public abstract T toEntity();

    @Override
    public String toString() {
        return "fileId=" + fileId;
    }

    /**
     * 字符串转日期类型
     *
     * @param input 待转换的字符串
     * @return /
     */
    protected Date toDate(String input) {
        if (StrUtil.isBlank(input)) {
            return null;
        }
        try {
            // 日期格式化，支持三种格式：yyyy年MM月dd日、yyyy-MM-dd和yyyy/MM/dd
            return DateUtil.parse(input.trim(),
                    DatePattern.CHINESE_DATE_PATTERN, DatePattern.NORM_DATE_PATTERN, "yyyy/MM/dd");
        } catch (Exception ignored) {
        }
        return null;
    }

    /**
     * 字符串转数字
     *
     * @param input 待转换的字符串
     * @return /
     */
    protected BigDecimal toBigDecimal(String input) {
        if (StrUtil.isBlank(input)) {
            return null;
        }
        try {
            // 移除所有非数字和“.”字符
            String cleanedInput = input.trim().replaceAll("[^\\d.]", "");
            // 创建BigDecimal对象
            return new BigDecimal(cleanedInput);
        } catch (NumberFormatException ignored) {
        }
        return null;
    }
}
