using System.ComponentModel.DataAnnotations;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Crm
{
    /// <summary>
    /// Model tạo/cập nhật tài khoản ngân hàng khách hàng
    /// </summary>
    public class CustomerBankAccountModel
    {
        /// <summary>
        /// ID (0 nếu tạo mới)
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// ID khách hàng
        /// </summary>
        [Required(ErrorMessage = "Vui lòng chọn khách hàng")]
        public int CustomerId { get; set; }

        /// <summary>
        /// Số tài khoản
        /// </summary>
        [Required(ErrorMessage = "Vui lòng nhập số tài khoản")]
        [MaxLength(64, ErrorMessage = "Số tài khoản không được vượt quá 64 ký tự")]
        [RegularExpression(@"^[0-9]+$", ErrorMessage = "Số tài khoản chỉ được chứa số")]
        public string AccountNumber { get; set; } = string.Empty;

        /// <summary>
        /// Tên chủ tài khoản
        /// </summary>
        [Required(ErrorMessage = "Vui lòng nhập tên chủ tài khoản")]
        [MaxLength(256, ErrorMessage = "Tên chủ tài khoản không được vượt quá 256 ký tự")]
        public string AccountHolderName { get; set; } = string.Empty;

        /// <summary>
        /// Mã ngân hàng
        /// </summary>
        [Required(ErrorMessage = "Vui lòng chọn ngân hàng")]
        [MaxLength(16, ErrorMessage = "Mã ngân hàng không được vượt quá 16 ký tự")]
        public string BankCode { get; set; } = string.Empty;

        /// <summary>
        /// Tên ngân hàng
        /// </summary>
        [Required(ErrorMessage = "Vui lòng nhập tên ngân hàng")]
        [MaxLength(256, ErrorMessage = "Tên ngân hàng không được vượt quá 256 ký tự")]
        public string BankName { get; set; } = string.Empty;

        /// <summary>
        /// Tên chi nhánh
        /// </summary>
        [MaxLength(256, ErrorMessage = "Tên chi nhánh không được vượt quá 256 ký tự")]
        public string BranchName { get; set; } = string.Empty;

        /// <summary>
        /// Địa chỉ chi nhánh
        /// </summary>
        [MaxLength(512, ErrorMessage = "Địa chỉ chi nhánh không được vượt quá 512 ký tự")]
        public string BranchAddress { get; set; } = string.Empty;

        /// <summary>
        /// Có phải tài khoản mặc định
        /// </summary>
        public bool IsDefault { get; set; } = false;

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



        /// <summary>
        /// Người cập nhật (sẽ được set từ controller)
        /// </summary>
        public int UpdatedBy { get; set; }

        /// <summary>
        /// Tên người cập nhật (sẽ được set từ controller)
        /// </summary>
        public string UpdatedByUsername { get; set; } = string.Empty;

        /// <summary>
        /// Validate model
        /// </summary>
        /// <returns></returns>
        public List<string> Validate()
        {
            var errors = new List<string>();

            if (CustomerId <= 0)
            {
                errors.Add("Vui lòng chọn khách hàng");
            }

            if (string.IsNullOrWhiteSpace(AccountNumber))
            {
                errors.Add("Vui lòng nhập số tài khoản");
            }
            else if (AccountNumber.Length < 6)
            {
                errors.Add("Số tài khoản phải có ít nhất 6 ký tự");
            }

            if (string.IsNullOrWhiteSpace(AccountHolderName))
            {
                errors.Add("Vui lòng nhập tên chủ tài khoản");
            }

            if (string.IsNullOrWhiteSpace(BankCode))
            {
                errors.Add("Vui lòng chọn ngân hàng");
            }

            if (string.IsNullOrWhiteSpace(BankName))
            {
                errors.Add("Vui lòng nhập tên ngân hàng");
            }

            return errors;
        }
    }
}
