using System.ComponentModel.DataAnnotations;
using Lada.Framework.DTO;
using Microsoft.AspNetCore.Http;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finance
{
    /// <summary>
    /// Model tạo hóa đơn thuế
    /// </summary>
    public class CreateTaxInvoiceModel : BaseModel<int>
    {
        /// <summary>
        /// ID phiếu đối soát
        /// </summary>
        [Required(ErrorMessage = "ID phiếu đối soát là bắt buộc")]
        public int CustomerReconciliationSlipId { get; set; }

        /// <summary>
        /// ID thông tin VAT
        /// </summary>
        [Required(ErrorMessage = "ID thông tin VAT là bắt buộc")]
        public int VatInfoId { get; set; }

        /// <summary>
        /// Ghi chú
        /// </summary>
        [MaxLength(2048, ErrorMessage = "Ghi chú không được vượt quá 2048 ký tự")]
        public string Note { get; set; } = string.Empty;

        public List<string> Validate()
        {
            var errors = new List<string>();

            if (CustomerReconciliationSlipId <= 0)
                errors.Add("ID phiếu đối soát không hợp lệ");

            if (VatInfoId <= 0)
                errors.Add("ID thông tin VAT không hợp lệ");

            return errors;
        }
    }

    /// <summary>
    /// Model cập nhật trạng thái hóa đơn thuế
    /// </summary>
    public class UpdateTaxInvoiceStatusModel : BaseModel<int>
    {
        /// <summary>
        /// ID hóa đơn thuế
        /// </summary>
        [Required(ErrorMessage = "ID hóa đơn thuế là bắt buộc")]
        public int TaxInvoiceId { get; set; }

        /// <summary>
        /// Trạng thái mới (2=Draft, 3=Issued)
        /// </summary>
        [Required(ErrorMessage = "Trạng thái là bắt buộc")]
        [Range(2, 3, ErrorMessage = "Trạng thái phải là Draft (2) hoặc Issued (3)")]
        public int Status { get; set; }

        /// <summary>
        /// Số hóa đơn (bắt buộc khi status = Draft hoặc Issued)
        /// </summary>
        [MaxLength(50, ErrorMessage = "Số hóa đơn không được vượt quá 50 ký tự")]
        public string InvoiceNumber { get; set; } = string.Empty;

        /// <summary>
        /// Ngày xuất hóa đơn (bắt buộc khi status = Draft hoặc Issued)
        /// </summary>
        public DateTimeOffset? InvoiceDate { get; set; }

        /// <summary>
        /// File PDF hóa đơn (bắt buộc khi status = Draft hoặc Issued)
        /// </summary>
        public List<IFormFile>? Files { get; set; }

        public List<string> Validate()
        {
            var errors = new List<string>();

            if (TaxInvoiceId <= 0)
                errors.Add("ID hóa đơn thuế không hợp lệ");

            if (Status < 2 || Status > 3)
                errors.Add("Trạng thái phải là Draft (2) hoặc Issued (3)");

            // Validate required fields for Draft/Issued status
            if (Status >= 2)
            {
                if (string.IsNullOrWhiteSpace(InvoiceNumber))
                    errors.Add("Số hóa đơn là bắt buộc khi cập nhật sang Draft hoặc Issued");

                if (!InvoiceDate.HasValue)
                    errors.Add("Ngày xuất hóa đơn là bắt buộc khi cập nhật sang Draft hoặc Issued");

                if (Files == null || Files.Count == 0)
                    errors.Add("File PDF hóa đơn là bắt buộc khi cập nhật sang Draft hoặc Issued");
                else if (Files.Count > 1)
                    errors.Add("Chỉ được upload 1 file PDF");
            }

            return errors;
        }
    }
}
