<?php
declare(strict_types=1);

namespace App\Domain\Common\ValueObject;

final readonly class Email
{
    /**
     * @param string $value Email-Adresse
     */
    public function __construct(
        public string $value
    ) {
        if (empty($value)) {
            throw new \InvalidArgumentException('E-Mail-Adresse darf nicht leer sein.');
        }

        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            throw new \InvalidArgumentException('Ungültige E-Mail-Adresse: ' . $value);
        }

        // Optional: Einfache Domain-Prüfung ohne externen Aufruf
        $domain = substr(strrchr($value, '@'), 1);
        if (strlen($domain) < 4 || !str_contains($domain, '.')) {
            throw new \InvalidArgumentException('Ungültige Domain in der E-Mail-Adresse: ' . $domain);
        }

    }

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

    public function __toString(): string
    {
        return $this->value;
    }
}
