package com.social.media.domain.shared.valueobject;

import com.social.media.domain.shared.exception.InvalidEmailException;

import java.util.regex.Pattern;

/**
 * Value Object representing an email address
 * Ensures email format validation and immutability
 */
public record Email(String value) {
    
    private static final Pattern EMAIL_PATTERN = Pattern.compile(
        "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
    );
    
    public Email {
        if (value == null || value.trim().isEmpty()) {
            throw new InvalidEmailException("Email cannot be null or empty");
        }
        
        String trimmedValue = value.trim().toLowerCase();
        if (!EMAIL_PATTERN.matcher(trimmedValue).matches()) {
            throw new InvalidEmailException("Invalid email format: " + value);
        }
        
        value = trimmedValue;
    }
    
    public String getDomain() {
        return value.substring(value.indexOf('@') + 1);
    }
    
    public String getLocalPart() {
        return value.substring(0, value.indexOf('@'));
    }
    
    @Override
    public String toString() {
        return value;
    }
}
