// EN: Bank account value object.
// VI: Value object tài khoản ngân hàng.

namespace MerchantService.Domain.AggregatesModel.MerchantAggregate;

/// <summary>
/// EN: Value object representing a bank account for settlement.
/// VI: Value object đại diện cho tài khoản ngân hàng để thanh toán.
/// </summary>
public record BankAccount
{
    /// <summary>
    /// EN: Bank code (e.g., "VCB", "TCB").
    /// VI: Mã ngân hàng (ví dụ: "VCB", "TCB").
    /// </summary>
    public string BankCode { get; init; } = string.Empty;
    
    /// <summary>
    /// EN: Full bank name.
    /// VI: Tên đầy đủ ngân hàng.
    /// </summary>
    public string BankName { get; init; } = string.Empty;
    
    /// <summary>
    /// EN: Account number.
    /// VI: Số tài khoản.
    /// </summary>
    public string AccountNumber { get; init; } = string.Empty;
    
    /// <summary>
    /// EN: Account holder name (must match business name).
    /// VI: Tên chủ tài khoản (phải trùng với tên doanh nghiệp).
    /// </summary>
    public string AccountHolderName { get; init; } = string.Empty;
    
    /// <summary>
    /// EN: Creates empty bank account.
    /// VI: Tạo tài khoản ngân hàng rỗng.
    /// </summary>
    public static BankAccount Empty => new();
    
    /// <summary>
    /// EN: Check if bank account is valid for settlement.
    /// VI: Kiểm tra tài khoản ngân hàng hợp lệ để thanh toán.
    /// </summary>
    public bool IsValid =>
        !string.IsNullOrWhiteSpace(BankCode) &&
        !string.IsNullOrWhiteSpace(AccountNumber) &&
        !string.IsNullOrWhiteSpace(AccountHolderName);
}
