using System;
using System.Collections.Generic;

namespace NPP.SmartSchedue.Api.Contracts.Services.Work.Input;

/// <summary>
/// 任务分配推荐输入
/// </summary>
public class WorkOrderAssignmentRecommendationInput
{
    /// <summary>
    /// 任务ID列表
    /// </summary>
    public List<long> WorkOrderIds { get; set; } = new List<long>();

    /// <summary>
    /// 推荐开始日期
    /// </summary>
    public DateTime StartDate { get; set; }

    /// <summary>
    /// 推荐结束日期
    /// </summary>
    public DateTime EndDate { get; set; }

    /// <summary>
    /// 推荐策略
    /// </summary>
    public string RecommendationStrategy { get; set; } = "balanced";

    /// <summary>
    /// 是否考虑人员资质
    /// </summary>
    public bool ConsiderQualification { get; set; } = true;

    /// <summary>
    /// 是否考虑工作负荷
    /// </summary>
    public bool ConsiderWorkload { get; set; } = true;

    /// <summary>
    /// 是否考虑设备可用性
    /// </summary>
    public bool ConsiderEquipmentAvailability { get; set; } = true;

    /// <summary>
    /// 是否考虑时间冲突
    /// </summary>
    public bool ConsiderTimeConflict { get; set; } = true;

    /// <summary>
    /// 优先级权重配置
    /// </summary>
    public PriorityWeightConfig PriorityWeights { get; set; } = new PriorityWeightConfig();
}

/// <summary>
/// 优先级权重配置
/// </summary>
public class PriorityWeightConfig
{
    /// <summary>
    /// 资质匹配权重
    /// </summary>
    public double QualificationWeight { get; set; } = 0.3;

    /// <summary>
    /// 工作负荷权重
    /// </summary>
    public double WorkloadWeight { get; set; } = 0.25;

    /// <summary>
    /// 设备可用性权重
    /// </summary>
    public double EquipmentWeight { get; set; } = 0.2;

    /// <summary>
    /// 时间冲突权重
    /// </summary>
    public double TimeConflictWeight { get; set; } = 0.15;

    /// <summary>
    /// 历史表现权重
    /// </summary>
    public double PerformanceWeight { get; set; } = 0.1;
} 