<?php

namespace patest\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for Payment.UppPaymentMethod StructType
 * @subpackage Structs
 */
class Payment_UppPaymentMethod extends Payment_OpsPaymentMethod
{
    /**
     * The Capabilities
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var int
     */
    public $Capabilities;
    /**
     * The EnhancedLevelSupported
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var bool
     */
    public $EnhancedLevelSupported;
    /**
     * The FullStack
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var bool
     */
    public $FullStack;
    /**
     * The GlobalTenantId
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var int
     */
    public $GlobalTenantId;
    /**
     * The OriginalConfiguration
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $OriginalConfiguration;
    /**
     * The ProviderId
     * Meta information extracted from the WSDL
     * - documentation: Calculated.
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $ProviderId;
    /**
     * Constructor method for Payment.UppPaymentMethod
     * @uses Payment_UppPaymentMethod::setCapabilities()
     * @uses Payment_UppPaymentMethod::setEnhancedLevelSupported()
     * @uses Payment_UppPaymentMethod::setFullStack()
     * @uses Payment_UppPaymentMethod::setGlobalTenantId()
     * @uses Payment_UppPaymentMethod::setOriginalConfiguration()
     * @uses Payment_UppPaymentMethod::setProviderId()
     * @param int $capabilities
     * @param bool $enhancedLevelSupported
     * @param bool $fullStack
     * @param int $globalTenantId
     * @param string $originalConfiguration
     * @param string $providerId
     */
    public function __construct($capabilities = null, $enhancedLevelSupported = null, $fullStack = null, $globalTenantId = null, $originalConfiguration = null, $providerId = null)
    {
        $this
            ->setCapabilities($capabilities)
            ->setEnhancedLevelSupported($enhancedLevelSupported)
            ->setFullStack($fullStack)
            ->setGlobalTenantId($globalTenantId)
            ->setOriginalConfiguration($originalConfiguration)
            ->setProviderId($providerId);
    }
    /**
     * Get Capabilities value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return int|null
     */
    public function getCapabilities()
    {
        return isset($this->Capabilities) ? $this->Capabilities : null;
    }
    /**
     * Set Capabilities value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param int $capabilities
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setCapabilities($capabilities = null)
    {
        // validation for constraint: int
        if (!is_null($capabilities) && !(is_int($capabilities) || ctype_digit($capabilities))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($capabilities, true), gettype($capabilities)), __LINE__);
        }
        if (is_null($capabilities) || (is_array($capabilities) && empty($capabilities))) {
            unset($this->Capabilities);
        } else {
            $this->Capabilities = $capabilities;
        }
        return $this;
    }
    /**
     * Get EnhancedLevelSupported value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return bool|null
     */
    public function getEnhancedLevelSupported()
    {
        return isset($this->EnhancedLevelSupported) ? $this->EnhancedLevelSupported : null;
    }
    /**
     * Set EnhancedLevelSupported value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param bool $enhancedLevelSupported
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setEnhancedLevelSupported($enhancedLevelSupported = null)
    {
        // validation for constraint: boolean
        if (!is_null($enhancedLevelSupported) && !is_bool($enhancedLevelSupported)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($enhancedLevelSupported, true), gettype($enhancedLevelSupported)), __LINE__);
        }
        if (is_null($enhancedLevelSupported) || (is_array($enhancedLevelSupported) && empty($enhancedLevelSupported))) {
            unset($this->EnhancedLevelSupported);
        } else {
            $this->EnhancedLevelSupported = $enhancedLevelSupported;
        }
        return $this;
    }
    /**
     * Get FullStack value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return bool|null
     */
    public function getFullStack()
    {
        return isset($this->FullStack) ? $this->FullStack : null;
    }
    /**
     * Set FullStack value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param bool $fullStack
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setFullStack($fullStack = null)
    {
        // validation for constraint: boolean
        if (!is_null($fullStack) && !is_bool($fullStack)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($fullStack, true), gettype($fullStack)), __LINE__);
        }
        if (is_null($fullStack) || (is_array($fullStack) && empty($fullStack))) {
            unset($this->FullStack);
        } else {
            $this->FullStack = $fullStack;
        }
        return $this;
    }
    /**
     * Get GlobalTenantId value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return int|null
     */
    public function getGlobalTenantId()
    {
        return isset($this->GlobalTenantId) ? $this->GlobalTenantId : null;
    }
    /**
     * Set GlobalTenantId value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param int $globalTenantId
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setGlobalTenantId($globalTenantId = null)
    {
        // validation for constraint: int
        if (!is_null($globalTenantId) && !(is_int($globalTenantId) || ctype_digit($globalTenantId))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($globalTenantId, true), gettype($globalTenantId)), __LINE__);
        }
        if (is_null($globalTenantId) || (is_array($globalTenantId) && empty($globalTenantId))) {
            unset($this->GlobalTenantId);
        } else {
            $this->GlobalTenantId = $globalTenantId;
        }
        return $this;
    }
    /**
     * Get OriginalConfiguration value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return string|null
     */
    public function getOriginalConfiguration()
    {
        return isset($this->OriginalConfiguration) ? $this->OriginalConfiguration : null;
    }
    /**
     * Set OriginalConfiguration value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param string $originalConfiguration
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setOriginalConfiguration($originalConfiguration = null)
    {
        // validation for constraint: string
        if (!is_null($originalConfiguration) && !is_string($originalConfiguration)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($originalConfiguration, true), gettype($originalConfiguration)), __LINE__);
        }
        if (is_null($originalConfiguration) || (is_array($originalConfiguration) && empty($originalConfiguration))) {
            unset($this->OriginalConfiguration);
        } else {
            $this->OriginalConfiguration = $originalConfiguration;
        }
        return $this;
    }
    /**
     * Get ProviderId value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return string|null
     */
    public function getProviderId()
    {
        return isset($this->ProviderId) ? $this->ProviderId : null;
    }
    /**
     * Set ProviderId value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param string $providerId
     * @return \patest\StructType\Payment_UppPaymentMethod
     */
    public function setProviderId($providerId = null)
    {
        // validation for constraint: string
        if (!is_null($providerId) && !is_string($providerId)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($providerId, true), gettype($providerId)), __LINE__);
        }
        if (is_null($providerId) || (is_array($providerId) && empty($providerId))) {
            unset($this->ProviderId);
        } else {
            $this->ProviderId = $providerId;
        }
        return $this;
    }
}
