<?php


namespace iDServer\Saml;


class NameIdMappingData extends AbstractSamlData
{
    /**
     * @var NameId
     */
    private $nameId;

    /**
     * @var NameIdPolicy
     */
    private $nameIdPolicy;

    /**
     * @var string[]
     */
    private $audiences;

    /**
     * @var ExtensionData
     */
    private $extensions;

    /**
     * @var AttributeData[]
     */
    private $attributes = [];

    /**
     * @return AttributeData[]
     */
    public function getAttributes(): array
    {
        return $this->attributes;
    }

    /**
     * @param AttributeData[] $attributes
     * @return $this
     */
    public function setAttributes(array $attributes): self
    {
        $this->attributes = $attributes;
        return $this;
    }

    /**
     * @return ExtensionData
     */
    public function getExtensions(): ?ExtensionData
    {
        return $this->extensions;
    }

    /**
     * @param ExtensionData $extensions
     * @return $this
     */
    public function setExtensions(ExtensionData $extensions): self
    {
        $this->extensions = $extensions;
        return $this;
    }

    /**
     * @param AttributeData[] $attributes
     * @return $this
     */
    public function setExtensionAttributes(array $attributes): self
    {
        if (!$this->getExtensions()) {
            $this->setExtensions(new ExtensionData());
        }
        $this->getExtensions()->setAttributes($attributes);

        return $this;
    }

    /**
     * @param AttributeData $attributeData
     * @return $this
     */
    public function addExtensionAttribute(AttributeData $attributeData): self
    {
        if (!$this->getExtensions()) {
            $this->setExtensions(new ExtensionData());
        }
        $this->getExtensions()->addAttribute($attributeData);

        return $this;
    }

    /**
     * @param array $attributes
     * @return $this
     */
    public function setExtensionRequestedAttributes(array $attributes): self
    {
        if (!$this->getExtensions()) {
            $this->setExtensions(new ExtensionData());
        }
        $this->getExtensions()->setRequestedAttributes($attributes);

        return $this;
    }

    /**
     * @param AttributeData $attributeData
     * @return $this
     */
    public function addExtensionRequestedAttribute(AttributeData $attributeData): self
    {
        if (!$this->getExtensions()) {
            $this->setExtensions(new ExtensionData());
        }
        $this->getExtensions()->addRequestedAttribute($attributeData);

        return $this;
    }

    /**
     * @param string $spType
     * @return $this
     */
    public function setSpType(string $spType): self
    {
        if (!$this->getExtensions()) {
            $this->setExtensions(new ExtensionData());
        }
        $this->getExtensions()->setSpType($spType);

        return $this;
    }

    /**
     * @return string[]
     */
    public function getAudiences(): array
    {
        return $this->audiences;
    }

    /**
     * @param string[] $audiences
     * @return $this
     */
    public function setAudiences(array $audiences): self
    {
        $this->audiences = $audiences;
        return $this;
    }

    /**
     * @return NameId
     */
    public function getNameId(): ?NameId
    {
        return $this->nameId;
    }

    /**
     * @param NameId $nameId
     * @return $this
     */
    public function setNameId(NameId $nameId): self
    {
        $this->nameId = $nameId;
        return $this;
    }

    /**
     * @return NameIdPolicy
     */
    public function getNameIdPolicy(): ?NameIdPolicy
    {
        return $this->nameIdPolicy;
    }

    /**
     * @param NameIdPolicy $nameIdPolicy
     * @return $this
     */
    public function setNameIdPolicy(NameIdPolicy $nameIdPolicy): self
    {
        $this->nameIdPolicy = $nameIdPolicy;
        return $this;
    }
}
