using CartWise.Domain.Enums;

namespace CartWise.Domain.Entities;

public class ProductIdentifier
{
    public Guid ProductIdentifierId { get; private set; }

    public Guid ProductId { get; private set; }

    public ProductIdentifierType IdentifierType { get; private set; }

    public string Value { get; private set; } = null!;

    public string NormalizedValue { get; private set; } = null!;

    private ProductIdentifier()
    {
    }

    internal ProductIdentifier(Guid productId, ProductIdentifierType identifierType, string value)
    {
        if (productId == Guid.Empty)
        {
            throw new ArgumentException("ProductId is required.", nameof(productId));
        }

        if (string.IsNullOrWhiteSpace(value))
        {
            throw new ArgumentException("Identifier value is required.", nameof(value));
        }

        ProductIdentifierId = Guid.NewGuid();
        ProductId = productId;
        IdentifierType = identifierType;
        Value = value.Trim();
        NormalizedValue = Normalize(value);
    }

    public static string Normalize(string value) => value.Trim().ToUpperInvariant();
}
