<?php


namespace iDServer\Saml;

use iDServer\Internal\Utilities;
use InvalidArgumentException;

abstract class AbstractSamlData
{
    const TYPE_OASIS = 'oasis';
    const TYPE_EIDAS = 'eidas';
    const TYPE_MIXED = 'mixed';

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

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

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

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

    /**
     * @return string
     */
    public function getId(): string
    {
        return $this->id ? : Utilities\get_id();
    }

    /**
     * @param string $id
     * @return $this
     */
    public function setId(string $id): self
    {
        $this->id = $id;
        return $this;
    }

    /**
     * @return string
     */
    public function getIssuer(): ?string
    {
        return $this->issuer;
    }

    /**
     * @param string $issuer
     * @return $this
     */
    public function setIssuer(string $issuer): self
    {
        $this->issuer = $issuer;
        return $this;
    }

    /**
     * @return string
     */
    public function getDestination(): ?string
    {
        return $this->destination;
    }

    /**
     * @param string $destination
     * @return $this
     */
    public function setDestination(?string $destination): self
    {
        if (!filter_var($destination, FILTER_VALIDATE_URL)) {
            throw new InvalidArgumentException("Invalid URL");
        }
        $this->destination = $destination;
        return $this;
    }

    /**
     * @return string
     */
    public function getIssueInstant(): string
    {
        return $this->issueInstant ? : Utilities\current_time();
    }

    /**
     * @param string $issueInstant
     * @return $this
     */
    public function setIssueInstant(string $issueInstant): self
    {
        $this->issueInstant = $issueInstant;
        return $this;
    }
}
