package com.njzscloud.common.sichen.pojo.param;

import cn.hutool.core.util.StrUtil;
import com.njzscloud.common.mvc.validator.Constrained;
import com.njzscloud.common.mvc.validator.ValidRule;
import com.njzscloud.common.sichen.contant.ScheduleType;
import com.njzscloud.common.sichen.contant.TaskLogLevel;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * 定时任务表
 */
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class ModifyTaskParam implements Constrained {
    @NotNull(message = "未指定要修改的数据")
    private Long id;

    /**
     * 任务名称：Task 注解的 value 属性，或执行函数的全限定名称
     */
    private String taskName;

    /**
     * 任务执行函数，全限定名称
     */
    private String fn;

    /**
     * 调度方式; 字典代码：schedule_type
     */
    private ScheduleType scheduleType;

    /**
     * 调度配置; 手动时为空，固定周期时单位为秒
     */
    private String scheduleConf;

    /**
     * 是否禁用; 0-->否、1-->是
     */
    private Boolean disabled;

    /**
     * 日志等级
     */
    private TaskLogLevel logLevel;
    /**
     * 备注
     */
    private String memo;

    @Override
    public ValidRule[] rules() {
        return new ValidRule[]{
            ValidRule.of(() -> StrUtil.isNotBlank(taskName)
                    || StrUtil.isNotBlank(fn)
                    || scheduleType != null
                    || StrUtil.isNotBlank(scheduleConf)
                    || disabled != null
                    || StrUtil.isNotBlank(memo),
                "未指定要修改的内容"),
            ValidRule.of(() -> scheduleType == null || (scheduleType == ScheduleType.Manually ? StrUtil.isBlank(scheduleConf) : StrUtil.isNotBlank(scheduleConf)), "调度方式或调度配置错误"),
        };
    }
}
