<?php

declare(strict_types=1);

namespace App\Administration\Domain\Model\User;

use App\Administration\Domain\Exception\EmailInvalideException;

use const FILTER_VALIDATE_EMAIL;

/**
 * Value Object représentant une adresse email valide.
 *
 * Note: Les property hooks PHP 8.5 ne sont pas compatibles avec readonly.
 * La validation reste dans le constructeur pour préserver l'immutabilité du Value Object.
 */
final readonly class Email
{
    /** @var non-empty-string */
    public string $value;

    public function __construct(string $value)
    {
        if (filter_var($value, FILTER_VALIDATE_EMAIL) === false || $value === '') {
            throw EmailInvalideException::pourAdresse($value);
        }

        $this->value = $value;
    }

    public function equals(self $other): bool
    {
        return strtolower($this->value) === strtolower($other->value);
    }

    /**
     * @return non-empty-string
     */
    public function __toString(): string
    {
        return $this->value;
    }
}
