using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using NPP.SmartSchedue.Api.Contracts.Core.Enums;

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

/// <summary>
/// 人员组创建输入
/// </summary>
public class PersonnelGroupCreateInput
{
    #region 基础信息
    
    /// <summary>
    /// 人员组名称
    /// </summary>
    [Required(ErrorMessage = "人员组名称不能为空")]
    [MaxLength(200, ErrorMessage = "人员组名称长度不能超过200个字符")]
    public string GroupName { get; set; } = "";

    /// <summary>
    /// 人员组描述
    /// </summary>
    [MaxLength(500, ErrorMessage = "人员组描述长度不能超过500个字符")]
    public string Description { get; set; } = "";

    /// <summary>
    /// 人员组类型
    /// </summary>
    public PersonnelGroupTypeEnum GroupType { get; set; } = PersonnelGroupTypeEnum.Mixed;

    /// <summary>
    /// 是否启用
    /// </summary>
    public bool IsEnabled { get; set; } = true;

    #endregion

    #region 静态人员配置
    
    /// <summary>
    /// 静态人员ID列表
    /// </summary>
    public List<long> StaticPersonnelIds { get; set; } = new List<long>();

    #endregion

    #region 动态规则配置
    
    /// <summary>
    /// 动态规则：部门ID列表
    /// 当GroupType包含DynamicByDepartment时有效
    /// </summary>
    public List<long> DynamicDepartmentIds { get; set; } = new List<long>();

    /// <summary>
    /// 动态规则：职位列表
    /// 当GroupType包含DynamicByPosition时有效
    /// </summary>
    public List<string> DynamicPositions { get; set; } = new List<string>();

    /// <summary>
    /// 动态规则：是否仅包含激活人员
    /// </summary>
    public bool OnlyActivePersonnel { get; set; } = true;

    #endregion

    #region 排除规则
    
    /// <summary>
    /// 排除人员ID列表
    /// 在动态规则生成的人员列表中排除这些人员
    /// </summary>
    public List<long> ExcludePersonnelIds { get; set; } = new List<long>();

    #endregion
}