using MktZaloService.Domain.SeedWork;

namespace MktZaloService.Domain.AggregatesModel.CustomerAggregate;

/// <summary>
/// EN: Entity representing a tag assigned to a customer.
/// VI: Entity đại diện cho thẻ gán cho khách hàng.
/// </summary>
public class Tag : Entity
{
    /// <summary>
    /// EN: Name of the tag.
    /// VI: Tên của thẻ.
    /// </summary>
    public string Name { get; private set; } = string.Empty;

    /// <summary>
    /// EN: When the tag was added.
    /// VI: Thời điểm thẻ được thêm.
    /// </summary>
    public DateTime CreatedAt { get; private set; }

    /// <summary>
    /// EN: ID of the customer this tag belongs to.
    /// VI: ID khách hàng mà thẻ này thuộc về.
    /// </summary>
    public Guid CustomerId { get; private set; }

    /// <summary>
    /// EN: Navigation property to parent Customer.
    /// VI: Navigation property đến Customer cha.
    /// </summary>
    public ZaloCustomer Customer { get; private set; } = null!;

    /// <summary>
    /// EN: Required by EF Core.
    /// VI: Yêu cầu bởi EF Core.
    /// </summary>
    protected Tag() { }

    /// <summary>
    /// EN: Create a new tag.
    /// VI: Tạo thẻ mới.
    /// </summary>
    public Tag(string name)
    {
        if (string.IsNullOrWhiteSpace(name))
        {
            throw new ArgumentException("Tag name cannot be empty", nameof(name));
        }

        Id = Guid.NewGuid();
        Name = name.Trim().ToLowerInvariant();
        CreatedAt = DateTime.UtcNow;
    }
}
