package org.xyzh.crontab.pojo;

import com.alibaba.fastjson2.JSON;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;

/**
 * @description 定时任务参数封装
 * @filename TaskParams.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-11-10
 */
@Data
@NoArgsConstructor
public class TaskParams {

    /**
     * 任务分组（对应yml中的item.name）
     */
    private String taskGroup;

    /**
     * 方法名称（对应yml中的method.name）
     */
    private String methodName;

    /**
     * 实际参数
     */
    private Map<String, Object> params;

    /**
     * 从JSON字符串解析
     */
    public static TaskParams fromJson(String json) {
        if (json == null || json.trim().isEmpty()) {
            return null;
        }
        try {
            return JSON.parseObject(json, TaskParams.class);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 转换为JSON字符串
     */
    public String toJson() {
        return JSON.toJSONString(this);
    }

    /**
     * 获取参数值
     */
    public Object getParam(String key) {
        return params != null ? params.get(key) : null;
    }

    /**
     * 设置参数值
     */
    public void setParam(String key, Object value) {
        if (params != null) {
            params.put(key, value);
        }
    }

    /**
     * 获取字符串参数
     */
    public String getParamAsString(String key) {
        Object value = getParam(key);
        return value != null ? value.toString() : null;
    }

    /**
     * 获取整数参数
     */
    public Integer getParamAsInt(String key) {
        Object value = getParam(key);
        if (value instanceof Integer) {
            return (Integer) value;
        } else if (value != null) {
            try {
                return Integer.parseInt(value.toString());
            } catch (NumberFormatException e) {
                return null;
            }
        }
        return null;
    }

    /**
     * 获取布尔参数
     */
    public Boolean getParamAsBoolean(String key) {
        Object value = getParam(key);
        if (value instanceof Boolean) {
            return (Boolean) value;
        } else if (value != null) {
            return Boolean.parseBoolean(value.toString());
        }
        return null;
    }
}
