package com.agent.management.model.entity;

import jakarta.persistence.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 工作流执行记录
 */
@Data
@Entity
@Table(name = "workflow_run")
public class WorkflowRun {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "workflow_id", nullable = false)
    private Long workflowId;

    /**
     * 工作流唯一标识（kebab-case name）冗余列，便于按 name 查询运行历史。
     * 旧数据可能为 null，按 workflowId 反查 Workflow.name 补齐。
     */
    @Column(name = "workflow_name")
    private String workflowName;

    @Column(name = "run_id", nullable = false, unique = true)
    private String runId;

    /** RUNNING, SUCCESS, FAILED */
    @Column(nullable = false)
    private String status;

    /**
     * AGENTIC 模式下的总访问次数；DAG 模式为 null。
     * <p>对应设计文档 {@code docs/plans/agentic-workflow-plan.md} §1.3。</p>
     */
    @Column(name = "visit_count")
    private Integer visitCount;

    /** 输入参数 JSON */
    @Column(columnDefinition = "TEXT")
    private String inputs;

    /** 输出结果 JSON（仅业务字段，不再包含元数据） */
    @Column(columnDefinition = "TEXT")
    private String outputs;

    /**
     * 工作空间文件列表（JSON 数组字符串，应用 .agentignore 过滤后的相对路径）。
     * 由 WorkflowEngine 在运行完成时扫描 workingDir 后写入，与 outputs 同级，
     * 供前端独立展示（不再注入到 output 节点的 envelope.data）。
     */
    @Column(name = "working_dir_files", columnDefinition = "TEXT")
    private String workingDirFiles;

    private String error;

    @Column(name = "started_at")
    private LocalDateTime startedAt;

    @Column(name = "completed_at")
    private LocalDateTime completedAt;

    @PrePersist
    protected void onCreate() {
        if (startedAt == null) startedAt = LocalDateTime.now();
    }
}
