// EN: Settlement configuration value object.
// VI: Value object cấu hình thanh toán.

namespace MerchantService.Domain.AggregatesModel.MerchantAggregate;

/// <summary>
/// EN: Value object representing settlement configuration for merchant payouts.
/// VI: Value object đại diện cho cấu hình thanh toán cho merchant.
/// </summary>
public record SettlementConfig
{
    /// <summary>
    /// EN: Bank account for receiving settlements.
    /// VI: Tài khoản ngân hàng để nhận thanh toán.
    /// </summary>
    public BankAccount BankAccount { get; init; } = BankAccount.Empty;
    
    /// <summary>
    /// EN: Platform commission rate (percentage, e.g., 5.0 = 5%).
    /// VI: Tỷ lệ hoa hồng platform (phần trăm, ví dụ: 5.0 = 5%).
    /// </summary>
    public decimal CommissionRate { get; init; } = 0m;
    
    /// <summary>
    /// EN: Settlement cycle (Daily, Weekly, Monthly).
    /// VI: Chu kỳ thanh toán (Hàng ngày, Hàng tuần, Hàng tháng).
    /// </summary>
    public int SettlementCycleId { get; init; } = SettlementCycle.Monthly.Id;
    
    /// <summary>
    /// EN: Whether to automatically settle or require manual trigger.
    /// VI: Có tự động thanh toán hay yêu cầu kích hoạt thủ công.
    /// </summary>
    public bool AutoSettlement { get; init; } = true;
    
    /// <summary>
    /// EN: Creates default settlement config.
    /// VI: Tạo cấu hình thanh toán mặc định.
    /// </summary>
    public static SettlementConfig Default => new()
    {
        BankAccount = BankAccount.Empty,
        CommissionRate = 0m,
        SettlementCycleId = SettlementCycle.Monthly.Id,
        AutoSettlement = true
    };
    
    /// <summary>
    /// EN: Check if settlement config is complete.
    /// VI: Kiểm tra cấu hình thanh toán đã đầy đủ chưa.
    /// </summary>
    public bool IsComplete => BankAccount.IsValid;
}
