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

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

/// <summary>
/// 人员组输出
/// </summary>
public class PersonnelGroupOutput
{
    #region 基础信息
    
    /// <summary>
    /// 人员组ID
    /// </summary>
    public long Id { get; set; }

    /// <summary>
    /// 人员组名称
    /// </summary>
    public string GroupName { get; set; } = "";

    /// <summary>
    /// 人员组描述
    /// </summary>
    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列表
    /// </summary>
    public List<long> DynamicDepartmentIds { get; set; } = new List<long>();

    /// <summary>
    /// 动态规则：职位列表
    /// </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

    #region 计算属性
    
    /// <summary>
    /// 当前有效人员总数（计算得出）
    /// </summary>
    public int TotalPersonnelCount { get; set; } = 0;

    /// <summary>
    /// 静态人员数量
    /// </summary>
    public int StaticPersonnelCount { get; set; } = 0;

    /// <summary>
    /// 动态人员数量
    /// </summary>
    public int DynamicPersonnelCount { get; set; } = 0;

    #endregion

    #region 时间信息
    
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime CreatedTime { get; set; }

    /// <summary>
    /// 修改时间
    /// </summary>
    public DateTime? ModifiedTime { get; set; }

    /// <summary>
    /// 最后修改时间
    /// </summary>
    public DateTime? LastModifiedTime { get; set; }

    #endregion
}