package org.example.Entity.Control.Fields;


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

// 假设这里存在 Field 类
import org.example.Entity.Control.Fields.Field;
import org.example.Utils.NativeExtensionUtils;

import java.util.regex.Pattern;


public class DateField extends Field {
    private String _format;

    public DateField(java.util.Map<String, Object> row) {
        super(row);
        this.defaultXtype = "fields.Date";
    }

    public String getFormat() {
        if (_format == null || _format.isEmpty()) {
            return "yyyy-MM-dd";
        }
        return _format.replace("DD", "dd");
    }

    public void setFormat(String format) {
        this._format = format;
    }

    @Override
    public Object getValue() {
        String formater = this.getFormat(); // 对应 C# 的 this.format
        Date outdate;

        // 处理 defaultsource 以 "{#p_" 开头且 defaultval 为空的情况
        if (getDefaultsource() != null && getDefaultsource().startsWith("{#p_")
                && (getDefaultval() == null || (getDefaultval() + "").trim().isEmpty())) {
            return getDefaultsource();
        }

        // 处理两者均为空的情况
        if ((getDefaultsource() == null || getDefaultsource().trim().isEmpty())
                && (getDefaultval() == null || (getDefaultval() + "").trim().isEmpty())) {
            return null;
        }

        // 解析 defaultval 为日期，失败则使用当前时间
        outdate = NativeExtensionUtils.toDateTime(getDefaultval());
        if (outdate == null) { // 若工具类返回 null，兜底为当前时间
            outdate = new Date();
        }

        // 按格式返回字符串（使用 SimpleDateFormat）
        if (formater == null || formater.isEmpty()) {
            formater = "yyyy-MM-dd"; // 默认格式，可参考 DateField 类
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(formater);
            return sdf.format(outdate);
        } catch (IllegalArgumentException e) {
            // 处理非法格式，返回默认格式
            return new SimpleDateFormat("yyyy-MM-dd").format(outdate);
        }

    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    public Object getMin() {
        return getLimitMinValue();
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    public Object getMax() {
        if (NativeExtensionUtils.isNullOrEmpty(getLimitMaxValue())) {
            return null;
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            sdf.parse(getLimitMaxValue() + "");
            return getLimitMaxValue();
        } catch (ParseException e) {
            return null;
        }
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    public Object getDateType() {
        String formatStr = getFormat().toLowerCase();
        return formatStr.contains("hh") ? "datetime" : null;
    }
}