namespace FutureMailAPI.DTOs
{
    public class NotificationDeviceDto
    {
        public string DeviceId { get; set; } = string.Empty;
        public string DeviceType { get; set; } = string.Empty; // iOS, Android, Web
        public string DeviceToken { get; set; } = string.Empty;
        public bool IsActive { get; set; } = true;
        public DateTime RegisteredAt { get; set; }
        public DateTime? LastActiveAt { get; set; }
    }
    
    public class NotificationSettingsDto
    {
        public bool EmailDelivery { get; set; } = true;
        public bool PushNotification { get; set; } = true;
        public bool InAppNotification { get; set; } = true;
        public bool DeliveryReminder { get; set; } = true;
        public bool ReceivedNotification { get; set; } = true;
        public bool SystemUpdates { get; set; } = false;
        public string QuietHoursStart { get; set; } = "22:00";
        public string QuietHoursEnd { get; set; } = "08:00";
        public bool EnableQuietHours { get; set; } = false;
    }
    
    public class NotificationMessageDto
    {
        public string Id { get; set; } = string.Empty;
        public int UserId { get; set; }
        public string Title { get; set; } = string.Empty;
        public string Body { get; set; } = string.Empty;
        public string Type { get; set; } = string.Empty; // DELIVERY, RECEIVED, SYSTEM, REMINDER
        public string RelatedEntityId { get; set; } = string.Empty; // 邮件ID等
        public bool IsRead { get; set; } = false;
        public DateTime CreatedAt { get; set; }
        public DateTime? ReadAt { get; set; }
        public Dictionary<string, object> Data { get; set; } = new();
    }
    
    public class NotificationDeviceRequestDto
    {
        public string DeviceType { get; set; } = string.Empty;
        public string DeviceToken { get; set; } = string.Empty;
    }
    
    public class NotificationDeviceResponseDto
    {
        public string DeviceId { get; set; } = string.Empty;
        public string DeviceType { get; set; } = string.Empty;
        public bool IsActive { get; set; }
        public DateTime RegisteredAt { get; set; }
    }
    
    public class NotificationListQueryDto
    {
        public bool UnreadOnly { get; set; } = false;
        public string? Type { get; set; }
        public int Page { get; set; } = 1;
        public int Size { get; set; } = 20;
    }
    
    public class NotificationListResponseDto
    {
        public List<NotificationMessageDto> Notifications { get; set; } = new();
        public int Total { get; set; }
        public int UnreadCount { get; set; }
        public int Page { get; set; }
        public int Size { get; set; }
    }
}