package com.erp.reconciliation.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.time.LocalDateTime;

/**
 * 对账任务实体
 * 记录对账任务的执行状态和进度
 * 
 * @author ERP Migration
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("reconciliation_task")
public class ReconciliationTask {

    @TableId(type = IdType.AUTO)
    private Long id;

    /** 任务编号 */
    private String taskNo;

    /** 任务类型: auto-自动对账, manual-手动对账, scheduled-定时对账 */
    private String taskType;

    /** 关联对账单ID */
    private Long billId;

    /** 对账单号 */
    private String billNo;

    /** 平台编码 */
    private String platform;

    /** 店铺ID */
    private Long shopId;

    /** 店铺名称 */
    private String shopName;

    /** 任务状态: pending-待执行, running-执行中, completed-已完成, failed-失败, cancelled-已取消 */
    private String taskStatus;

    /** 执行进度（0-100） */
    private Integer progress;

    /** 执行步骤 */
    private String currentStep;

    /** 任务开始时间 */
    private LocalDateTime startTime;

    /** 任务结束时间 */
    private LocalDateTime endTime;

    /** 执行耗时（秒） */
    private Integer durationSeconds;

    /** 执行结果消息 */
    private String resultMessage;

    /** 错误详情 */
    private String errorDetail;

    /** 触发人ID（手动对账时） */
    private Long triggerUserId;

    /** 触发人姓名 */
    private String triggerUserName;

    /** 备注 */
    private String remark;

    /** 租户ID */
    private Long tenantId;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;

    @TableLogic
    private LocalDateTime deletedAt;

    // ==================== 任务类型常量 ====================

    /** 自动对账 */
    public static final String TYPE_AUTO = "auto";
    
    /** 手动对账 */
    public static final String TYPE_MANUAL = "manual";
    
    /** 定时对账 */
    public static final String TYPE_SCHEDULED = "scheduled";

    // ==================== 任务状态常量 ====================

    /** 待执行 */
    public static final String STATUS_PENDING = "pending";
    
    /** 执行中 */
    public static final String STATUS_RUNNING = "running";
    
    /** 已完成 */
    public static final String STATUS_COMPLETED = "completed";
    
    /** 失败 */
    public static final String STATUS_FAILED = "failed";
    
    /** 已取消 */
    public static final String STATUS_CANCELLED = "cancelled";
}
