using System;

namespace NavisworksTransport.Core.Models
{
    /// <summary>
    /// 批处理队列项 - 简化版，只包含一条路径的碰撞检测任务
    /// </summary>
    public class BatchQueueItem
    {
        public int Id { get; set; }
        public string RouteId { get; set; } 
        public string PathRouteName { get; set; }  // 通过 JOIN PathRoutes 获取，用于显示
        public PathType PathType { get; set; }     // 通过 JOIN PathRoutes 获取，用于显示
        public BatchQueueStatus Status { get; set; }
        public DateTime CreatedTime { get; set; }
        public DateTime? StartTime { get; set; }
        public DateTime? EndTime { get; set; }
        public string ErrorMessage { get; set; }

        // 动画配置
        public int FrameRate { get; set; }
        public double DurationSeconds { get; set; }

        // 碰撞检测配置（模型单位）
        public double DetectionTolerance { get; set; }

        // 运动物体配置
        public bool IsVirtualObject { get; set; }
        public double VirtualObjectLength { get; set; }
        public double VirtualObjectWidth { get; set; }
        public double VirtualObjectHeight { get; set; }
        public string MovingObjectName { get; set; }  // 运动物体名称，虚拟物体时为 null

        // 碰撞检测配置
        public bool DetectAllObjects { get; set; } = true;

        // 角度修正配置
        public double ObjectRotationCorrection { get; set; }

        // 关联的检测记录ID（每次生成动画时创建）
        public int? DetectionRecordId { get; set; }

        // 结果
        public string ClashDetectiveTestName { get; set; }
        public int? CollisionCount { get; set; }

        // 注意：运动物体和碰撞检测目标都存储在 ModelItemReferences 表中
        // 使用 BatchQueueItem.Id 作为 ReferenceId 进行查询
        // Role = "MovingObject" 表示运动物体
        // Role = "CollisionTarget" 表示碰撞检测目标
    }

    /// <summary>
    /// 批处理队列项状态
    /// </summary>
    public enum BatchQueueStatus
    {
        All,        // 全部（用于筛选）
        Pending,    // 等待执行
        Running,    // 正在执行
        Completed,  // 已完成
        Failed,     // 执行失败
        Skipped     // 已跳过
    }
}