package com.fs.audit.chain;

import com.fs.audit.domain.Audit;
import com.fs.audit.domain.AuditFlow;
import com.fs.audit.dto.TemplateStepDTO;
import lombok.Data;

import java.util.List;

/**
 * 审核上下文
 * 责任链模式中的上下文对象，携带审核流程所需的所有信息
 */
@Data
public class AuditContext {

    /**
     * 审核实例
     */
    private Audit audit;

    /**
     * 当前步骤的流程记录
     */
    private AuditFlow currentFlow;

    /**
     * 模板步骤列表
     */
    private List<TemplateStepDTO> steps;

    /**
     * 当前步骤索引 (0-based)
     */
    private int currentStepIndex;

    /**
     * 审核人ID
     */
    private Long userId;
    /**
     * 0销售用户 1系统用户
     */
    private Integer userType;

    /**
     * 是否通过
     */
    private boolean approved;

    /**
     * 审核意见
     */
    private String comment;

    private Long companyId;

    /**
     * 获取当前步骤配置
     */
    public TemplateStepDTO getCurrentStepConfig() {
        if (currentStepIndex >= 0 && currentStepIndex < steps.size()) {
            return steps.get(currentStepIndex);
        }
        return null;
    }

    /**
     * 是否为最后一步
     */
    public boolean isLastStep() {
        return currentStepIndex >= steps.size() - 1;
    }

    /**
     * 获取下一步配置
     */
    public TemplateStepDTO getNextStepConfig() {
        if (!isLastStep()) {
            return steps.get(currentStepIndex + 1);
        }
        return null;
    }
}

