using System;
using System.Collections.Generic;

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

/// <summary>
/// 智能任务分配输入参数
/// </summary>
public class SmartAssignmentInput
{
    /// <summary>
    /// 偏好的人员ID
    /// </summary>
    public long? PreferredPersonnelId { get; set; }
    
    /// <summary>
    /// 分配策略 (如: "优先级", "负载均衡", "技能匹配"等)
    /// </summary>
    public string AssignmentStrategy { get; set; }
    
    /// <summary>
    /// 是否考虑人员技能匹配
    /// </summary>
    public bool ConsiderSkills { get; set; } = true;
    
    /// <summary>
    /// 是否考虑人员当前负载
    /// </summary>
    public bool ConsiderWorkload { get; set; } = true;
    
    /// <summary>
    /// 是否考虑时间约束
    /// </summary>
    public bool ConsiderTimeConstraints { get; set; } = true;
    
    /// <summary>
    /// 优先级权重
    /// </summary>
    public int PriorityWeight { get; set; } = 1;
    
    /// <summary>
    /// 技能匹配权重
    /// </summary>
    public int SkillWeight { get; set; } = 1;
    
    /// <summary>
    /// 负载均衡权重
    /// </summary>
    public int WorkloadWeight { get; set; } = 1;
    
    /// <summary>
    /// 最早开始时间
    /// </summary>
    public DateTime? EarliestStartTime { get; set; }
    
    /// <summary>
    /// 最晚完成时间
    /// </summary>
    public DateTime? LatestEndTime { get; set; }
    
    /// <summary>
    /// 所需技能列表
    /// </summary>
    public List<string> RequiredSkills { get; set; } = new List<string>();
    
    /// <summary>
    /// 所需设备列表
    /// </summary>
    public List<long> RequiredEquipmentIds { get; set; } = new List<long>();
}