<?php

declare(strict_types=1);

namespace Xentral\Modules\GoogleApi\Data;

use Xentral\Modules\GoogleApi\Exception\GoogleCredentialsException;

final class GoogleCredentialsData
{
    /** @var string|null $clientId */
    private $clientId;

    /** @var string|null $clientSecret */
    private $clientSecret;

    /** @var string|null $redirectUri */
    private $redirectUri;

    /**
     * @param string $clientId
     * @param string $clientSecret
     * @param string $redirectUri
     */
    public function __construct(
        ?string $clientId,
        ?string $clientSecret,
        ?string $redirectUri
    ) {
        $this->clientId = $clientId;
        $this->clientSecret = $clientSecret;
        $this->redirectUri = $redirectUri;
    }

    /**
     * @return string|null
     */
    public function getClientId(): ?string
    {
        return $this->clientId;
    }

    /**
     * @return string|null
     */
    public function getClientSecret(): ?string
    {
        return $this->clientSecret;
    }

    /**
     * @return string|null
     */
    public function getRedirectUri(): ?string
    {
        return $this->redirectUri;
    }

    /**
     * @throws GoogleCredentialsException
     *
     * @return void
     */
    public function validate(): void
    {
        if (empty($this->getClientId())) {
            throw new GoogleCredentialsException('Google client-id not set.');
        }
        if (empty($this->getClientSecret())) {
            throw new GoogleCredentialsException('Google client secret not set.');
        }
    }
}