Email.java

package com.chronus.domain.valueobject;

import com.chronus.domain.exception.InvalidEmailException;

// record is a immutable value object
public record Email(String value)

{

    // constructor compacto para la auto-validación de la dirección de email
    public Email {

        if (value == null || value.isBlank()) {
            throw new InvalidEmailException("Email is required");
        }

        // normalizar el email antes de validarlo
        String cleanValue = value.trim().toLowerCase();

        String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
        if (!cleanValue.matches(emailRegex)) {
            throw new InvalidEmailException("Invalid email address");
        }

        value = cleanValue;
    }

}