<?php

declare(strict_types=1);

namespace Orrisroot\Mail;

class Address
{
    public const EMAIL_REGEX = '[a-zA-Z0-9]+(?:[_\\.\\-][a-zA-Z0-9]+)*@(?:[a-zA-Z0-9]+(?:[\\.\\-][a-zA-Z0-9]+)*)+\\.[a-zA-Z]{2,}';

    /**
     * @var string name
     */
    private string $name;

    /**
     * @var string email address
     */
    private string $email;

    /**
     * constructor.
     *
     * @param string $name  name
     * @param string $email email address
     *
     * @throws Exception
     */
    public function __construct(string $name, string $email)
    {
        $this->name = $name;
        if (!$this->validateEmail($email)) {
            throw new \Exception('Invalid email address found: '.$email);
        }
        $this->email = $email;
    }

    /**
     * get name.
     *
     * @return string name
     */
    public function getName(): string
    {
        return $this->name;
    }

    /**
     * get email.
     *
     * @return string email
     */
    public function getEmail(): string
    {
        return $this->email;
    }

    /**
     * check wheter string is email.
     *
     * @param string $text email
     *
     * @return bool false if not email string
     */
    public function validateEmail(string $email): bool
    {
        return false !== preg_match('/^'.self::EMAIL_REGEX.'$/', $email);
    }
}