package com.fs.task.domain;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class ServiceGenResult {

    /** 命中的任务数（符合配置条件 & 待生成服务单） */
    private int taskTotal;

    /** 实际创建关联的任务数（成功挂到服务单的任务数） */
    private int taskCreated;

    /** 创建的服务单数（按医生拆分，一般 >= 0） */
    private int orderCreated;

    /** 备注：失败原因/跳过原因（建议截断 500） */
    private String remark;

    /** 是否整体成功（用于 run_log 标记） */
    private boolean success = true;

    /** 运行过程中累计的错误（只存少量关键信息） */
    private List<String> errors = new ArrayList<>();

    /** 每个医生拆单统计（可选，但强烈建议保留） */
    private List<DoctorOrderStat> doctorOrderStats = new ArrayList<>();

    public void addError(String msg) {
        this.success = false;
        if (msg == null) return;
        // 防止过长
        if (msg.length() > 300) msg = msg.substring(0, 300);
        this.errors.add(msg);
    }

    /** 把 errors 合并成 run_log.remark 用的字符串 */
    public String buildRemarkForLog(int maxLen) {
        if (remark != null && !remark.trim().isEmpty()) {
            return trimTo(remark, maxLen);
        }
        if (errors == null || errors.isEmpty()) return null;
        String joined = String.join(" | ", errors);
        return trimTo(joined, maxLen);
    }

    private String trimTo(String s, int maxLen) {
        if (s == null) return null;
        if (maxLen <= 0) return s;
        return s.length() <= maxLen ? s : s.substring(0, maxLen);
    }

    @Data
    public static class DoctorOrderStat {
        private Long doctorId;
        private String doctorName;

        /** 本医生本次命中的任务数 */
        private int taskCount;

        /** 本医生生成的服务单ID */
        private Long serviceOrderId;

        /** 生成的服务单号（可选） */
        private String serviceOrderNo;
    }
}
