using System.ComponentModel.DataAnnotations;
using Lada.Framework.Data.Domains.Finance;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finance
{
    /// <summary>
    /// Model tạo phiếu đối soát
    /// </summary>
    public class CreateCustomerReconciliationSlipModel
    {
        /// <summary>
        /// ID khách hàng
        /// </summary>
        [Required]
        public int CustomerId { get; set; }

        /// <summary>
        /// Danh sách ID đơn hàng được chọn
        /// </summary>
        [Required]
        public List<int> OrderIds { get; set; } = new List<int>();

        /// <summary>
        /// Ghi chú nội bộ
        /// </summary>
        public string InternalNote { get; set; } = string.Empty;

        /// <summary>
        /// File ảnh chứng từ (bắt buộc cho phiếu âm - khách chuyển khoản cho công ty)
        /// </summary>
        public List<IFormFile>? Files { get; set; } = new List<IFormFile>();

        #region Thông tin tài khoản ngân hàng nhận tiền (chỉ dùng cho phiếu Receivable - công ty chuyển tiền cho khách)

        /// <summary>
        /// Số tài khoản ngân hàng
        /// </summary>
        public string? BankAccountNumber { get; set; }

        /// <summary>
        /// Tên chủ tài khoản
        /// </summary>
        public string? BankAccountHolderName { get; set; }

        /// <summary>
        /// Mã ngân hàng (VCB, TCB, VTB, etc.)
        /// </summary>
        public string? BankCode { get; set; }

        /// <summary>
        /// Tên ngân hàng
        /// </summary>
        public string? BankName { get; set; }

        /// <summary>
        /// Tên chi nhánh ngân hàng
        /// </summary>
        public string? BankBranchName { get; set; }

        /// <summary>
        /// Địa chỉ chi nhánh ngân hàng
        /// </summary>
        public string? BankBranchAddress { get; set; }

        #endregion
    }

    /// <summary>
    /// Model từ chối phiếu
    /// </summary>
    public class RejectCustomerReconciliationSlipModel
    {
        [Required]
        public int Id { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập lý do từ chối")]
        public string Reason { get; set; } = string.Empty;
    }

    /// <summary>
    /// Model hoàn thành phiếu (xác nhận thanh toán)
    /// </summary>
    public class CompleteCustomerReconciliationSlipModel
    {
        [Required]
        public int Id { get; set; }

        /// <summary>
        /// Ảnh chứng từ (nếu có)
        /// </summary>
        public string ProofImageUrl { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú thêm
        /// </summary>
        public string Note { get; set; } = string.Empty;
    }
}
