using Lada.Framework.DTO;
using Lada.Framework.Infrastructures.Helpers;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finance
{
    /// <summary>
    /// Model xuất Excel phiếu đối soát
    /// </summary>
    public class ReconciliationExcelExportModel : BaseModel<int>
    {
        /// <summary>
        /// Tên file Excel (không bao gồm extension)
        /// </summary>
        public string? FileName { get; set; }

        /// <summary>
        /// Danh sách ID phiếu đối soát cần xuất
        /// </summary>
        public List<int>? ReconciliationIds { get; set; }

        /// <summary>
        /// Ngày bắt đầu (để filter)
        /// </summary>
        public DateTime? FromDate { get; set; }

        /// <summary>
        /// Ngày kết thúc (để filter)
        /// </summary>
        public DateTime? ToDate { get; set; }

        /// <summary>
        /// ID khách hàng (để filter)
        /// </summary>
        public int? CustomerId { get; set; }

        /// <summary>
        /// Trạng thái phiếu đối soát (để filter)
        /// </summary>
        public int? Status { get; set; }

        /// <summary>
        /// Có bao gồm chi tiết đơn hàng không
        /// </summary>
        public bool IncludeOrderDetails { get; set; } = true;

        /// <summary>
        /// Có bao gồm thông tin chuyển khoản không
        /// </summary>
        public bool IncludeTransferInfo { get; set; } = true;

        /// <summary>
        /// Có bao gồm ghi chú không
        /// </summary>
        public bool IncludeNotes { get; set; } = true;

        /// <summary>
        /// Đường dẫn thư mục lưu file (tùy chọn)
        /// </summary>
        public string? FolderPath { get; set; }

        /// <summary>
        /// Validate model
        /// </summary>
        /// <returns>Danh sách lỗi validation</returns>
        public List<string> Validate()
        {
            var errors = new List<string>();

            // Validate ngày
            if (FromDate.HasValue && ToDate.HasValue && FromDate > ToDate)
            {
                errors.Add("Ngày bắt đầu không được lớn hơn ngày kết thúc");
            }

            // Validate danh sách ID
            if (ReconciliationIds != null && ReconciliationIds.Any(id => id <= 0))
            {
                errors.Add("Danh sách ID phiếu đối soát chứa giá trị không hợp lệ");
            }

            // Validate tên file
            if (!string.IsNullOrEmpty(FileName))
            {
                var invalidChars = Path.GetInvalidFileNameChars();
                if (FileName.IndexOfAny(invalidChars) >= 0)
                {
                    errors.Add("Tên file chứa ký tự không hợp lệ");
                }
            }

            return errors;
        }
    }
}
