package com.zcloud.safetyDutyList.command.tasklist;

import com.alibaba.cola.exception.BizException;
import com.zcloud.safetyDutyList.domain.enums.SwitchFlagEnum;
import com.zcloud.safetyDutyList.domain.gateway.tasklist.TaskListGateway;
import com.zcloud.safetyDutyList.domain.model.tasklist.TaskListE;
import com.zcloud.safetyDutyList.dto.tasklist.TaskListIssueCmd;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 清单下发执行器
 * <p>
 * 处理安全责任清单下发的业务逻辑：
 *   1. 校验清单是否存在
 *   2. 校验清单开关是否为开启状态（仅开启状态的清单可下发）
 *   3. 设置下发状态、下发时间、执行企业、执行人、周期起止时间
 */
@Component
@AllArgsConstructor
public class TaskListIssueExe {
    private final TaskListGateway taskListGateway;

    public void execute(TaskListIssueCmd cmd) {
        TaskListE taskListE = taskListGateway.getInfoByTaskListId(cmd.getTaskListId());
        if (taskListE == null) {
            throw new BizException("任务清单不存在");
        }
        if (!SwitchFlagEnum.ON.getCode().equals(taskListE.getSwitchFlag())) {
            throw new BizException("仅可下发开启状态的任务清单");
        }
        taskListE.setIssueStatus(1);
        taskListE.setIssueTime(LocalDateTime.now());
        taskListE.setExecuteCorpId(cmd.getExecuteCorpId());
        taskListE.setExecuteDepartmentId(cmd.getExecuteDepartmentId());
        taskListE.setExecuteUserId(cmd.getExecuteUserId());

        // 1. 处理开始时间：当月1日 00:00:00
        LocalDateTime startTime = cmd.getPeriodStartTime()
                .withDayOfMonth(1) // 日 -> 1号
                .with(LocalTime.MIN); // 时分秒 -> 00:00:00

        // 2. 处理结束时间：当月最后一天 23:59:59
        LocalDateTime endTime = cmd.getPeriodEndTime()
                .withDayOfMonth(cmd.getPeriodEndTime().toLocalDate().lengthOfMonth())
                .with(LocalTime.of(23, 59, 59));

        taskListE.setPeriodStartTime(startTime);
        taskListE.setPeriodEndTime(endTime);
        boolean res = taskListGateway.update(taskListE);
        if (!res) {
            throw new BizException("下发失败");
        }
    }
}
