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

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

/// <summary>
/// 通知设置更新输入
/// </summary>
public class NotificationSettingUpdateInput
{
    #region 基础信息
    
    /// <summary>
    /// 通知设置ID
    /// </summary>
    [Required(ErrorMessage = "通知设置ID不能为空")]
    public long Id { get; set; }

    /// <summary>
    /// 通知名称
    /// </summary>
    [Required(ErrorMessage = "通知名称不能为空")]
    [MaxLength(200, ErrorMessage = "通知名称长度不能超过200个字符")]
    public string NotificationName { get; set; } = "";

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

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

    #endregion

    #region 通知方式配置
    
    /// <summary>
    /// 是否启用邮件通知
    /// </summary>
    public bool IsEmailEnabled { get; set; } = false;

    /// <summary>
    /// 是否启用系统消息通知
    /// </summary>
    public bool IsSystemMessageEnabled { get; set; } = true;

    #endregion

    #region 时间配置
    
    /// <summary>
    /// 通知开始时间（HH:mm格式，如：09:00）
    /// </summary>
    [Required(ErrorMessage = "通知开始时间不能为空")]
    [RegularExpression(@"^([01][0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "时间格式不正确，请使用HH:mm格式")]
    public string StartTime { get; set; } = "09:00";

    /// <summary>
    /// 通知结束时间（HH:mm格式，如：18:00）
    /// </summary>
    [Required(ErrorMessage = "通知结束时间不能为空")]
    [RegularExpression(@"^([01][0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "时间格式不正确，请使用HH:mm格式")]
    public string EndTime { get; set; } = "18:00";

    #endregion

    #region 频次配置
    
    /// <summary>
    /// 通知频次类型
    /// </summary>
    public NotificationFrequencyEnum FrequencyType { get; set; } = NotificationFrequencyEnum.Once;

    /// <summary>
    /// 间隔时间（分钟）
    /// 当FrequencyType为FixedInterval时必填
    /// </summary>
    public int? IntervalMinutes { get; set; }

    #endregion

    #region 人员组配置
    
    /// <summary>
    /// 关联的人员组ID
    /// </summary>
    [Required(ErrorMessage = "人员组不能为空")]
    public long PersonnelGroupId { get; set; }

    #endregion

    #region 模板配置
    
    /// <summary>
    /// 邮件主题模板
    /// </summary>
    [MaxLength(500, ErrorMessage = "邮件主题模板长度不能超过500个字符")]
    public string EmailSubjectTemplate { get; set; } = "";

    /// <summary>
    /// 邮件内容模板
    /// </summary>
    public string EmailContentTemplate { get; set; } = "";

    /// <summary>
    /// 系统消息标题模板
    /// </summary>
    [MaxLength(500, ErrorMessage = "系统消息标题模板长度不能超过500个字符")]
    public string SystemMessageTitleTemplate { get; set; } = "";

    /// <summary>
    /// 系统消息内容模板
    /// </summary>
    public string SystemMessageContentTemplate { get; set; } = "";

    #endregion

    #region 触发条件
    
    /// <summary>
    /// 触发条件表达式（JSON格式）
    /// </summary>
    public string TriggerConditions { get; set; } = "";

    #endregion
}