using System.ComponentModel.DataAnnotations;
using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.AppConfig
{
    /// <summary>
    /// Model cho tạo mới AppConfig
    /// </summary>
    public class CreateAppConfigModel : BaseModel<int>
    {
        [Required(ErrorMessage = "Key là bắt buộc")]
        [MaxLength(512, ErrorMessage = "Key không được vượt quá 512 ký tự")]
        public string Key { get; set; } = string.Empty;

        [Required(ErrorMessage = "Value là bắt buộc")]
        [MaxLength(1024, ErrorMessage = "Value không được vượt quá 1024 ký tự")]
        public string Value { get; set; } = string.Empty;

        [MaxLength(2048, ErrorMessage = "Description không được vượt quá 2048 ký tự")]
        public string? Description { get; set; }


    }

    /// <summary>
    /// Model cho cập nhật AppConfig
    /// </summary>
    public class UpdateAppConfigModel
    {
        [Required(ErrorMessage = "Id là bắt buộc")]
        public int Id { get; set; }

        [Required(ErrorMessage = "Key là bắt buộc")]
        [MaxLength(512, ErrorMessage = "Key không được vượt quá 512 ký tự")]
        public string Key { get; set; } = string.Empty;

        [Required(ErrorMessage = "Value là bắt buộc")]
        [MaxLength(1024, ErrorMessage = "Value không được vượt quá 1024 ký tự")]
        public string Value { get; set; } = string.Empty;

        [MaxLength(2048, ErrorMessage = "Description không được vượt quá 2048 ký tự")]
        public string? Description { get; set; }
    }

    /// <summary>
    /// Model cho search AppConfig
    /// </summary>
    public class SearchAppConfigModel
    {
        public string? KeyFilter { get; set; }
        public string? ValueFilter { get; set; }
        public int Page { get; set; } = 1;
        public int PageSize { get; set; } = 20;
    }

    /// <summary>
    /// Model kết quả cho AppConfig
    /// </summary>
    public class AppConfigResultModel
    {
        public int Id { get; set; }
        public string Key { get; set; } = string.Empty;
        public string Value { get; set; } = string.Empty;
        public string? Description { get; set; }
        public DateTime CreatedTime { get; set; }
        public DateTime? UpdatedTime { get; set; }
    }

    /// <summary>
    /// Model cho bulk update AppConfig
    /// </summary>
    public class BulkUpdateAppConfigModel
    {
        public List<UpdateAppConfigModel> Configs { get; set; } = new List<UpdateAppConfigModel>();
    }

    /// <summary>
    /// Model cho cache status
    /// </summary>
    public class AppConfigCacheStatusModel
    {
        public bool IsCacheLoaded { get; set; }
        public int CachedItemsCount { get; set; }
        public DateTime? LastCacheUpdate { get; set; }
    }
}