<?php

namespace Sabre\EnhancedAirBook\Structs;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for BaggageInfo Structs
 * @subpackage Structs
 */
class BaggageInfo extends AbstractStructBase
{
    /**
     * The SubCodeProperties
     * Meta informations extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \Sabre\EnhancedAirBook\Structs\SubCodeProperties[]
     */
    public $SubCodeProperties;
    /**
     * The NonUS_DOT_Disclosure
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure
     */
    public $NonUS_DOT_Disclosure;
    /**
     * The US_DOT_Disclosure
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure
     */
    public $US_DOT_Disclosure;
    /**
     * Constructor method for BaggageInfo
     * @uses BaggageInfo::setSubCodeProperties()
     * @uses BaggageInfo::setNonUS_DOT_Disclosure()
     * @uses BaggageInfo::setUS_DOT_Disclosure()
     * @param \Sabre\EnhancedAirBook\Structs\SubCodeProperties[] $subCodeProperties
     * @param \Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure $nonUS_DOT_Disclosure
     * @param \Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure $uS_DOT_Disclosure
     */
    public function __construct(array $subCodeProperties = array(), \Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure $nonUS_DOT_Disclosure = null, \Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure $uS_DOT_Disclosure = null)
    {
        $this
            ->setSubCodeProperties($subCodeProperties)
            ->setNonUS_DOT_Disclosure($nonUS_DOT_Disclosure)
            ->setUS_DOT_Disclosure($uS_DOT_Disclosure);
    }
    /**
     * Get SubCodeProperties value
     * @return \Sabre\EnhancedAirBook\Structs\SubCodeProperties[]|null
     */
    public function getSubCodeProperties()
    {
        return $this->SubCodeProperties;
    }
    /**
     * Set SubCodeProperties value
     * @throws \InvalidArgumentException
     * @param \Sabre\EnhancedAirBook\Structs\SubCodeProperties[] $subCodeProperties
     * @return \Sabre\EnhancedAirBook\Structs\BaggageInfo
     */
    public function setSubCodeProperties(array $subCodeProperties = array())
    {
        $this->SubCodeProperties = $subCodeProperties;
        return $this;
    }
    /**
     * Add item to SubCodeProperties value
     * @throws \InvalidArgumentException
     * @param \Sabre\EnhancedAirBook\Structs\SubCodeProperties $item
     * @return \Sabre\EnhancedAirBook\Structs\BaggageInfo
     */
    public function addToSubCodeProperties(\Sabre\EnhancedAirBook\Structs\SubCodeProperties $item)
    {
        $this->SubCodeProperties[] = $item;
        return $this;
    }
    /**
     * Get NonUS_DOT_Disclosure value
     * @return \Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure|null
     */
    public function getNonUS_DOT_Disclosure()
    {
        return $this->NonUS_DOT_Disclosure;
    }
    /**
     * Set NonUS_DOT_Disclosure value
     * @param \Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure $nonUS_DOT_Disclosure
     * @return \Sabre\EnhancedAirBook\Structs\BaggageInfo
     */
    public function setNonUS_DOT_Disclosure(\Sabre\EnhancedAirBook\Structs\NonUS_DOT_Disclosure $nonUS_DOT_Disclosure = null)
    {
        $this->NonUS_DOT_Disclosure = $nonUS_DOT_Disclosure;
        return $this;
    }
    /**
     * Get US_DOT_Disclosure value
     * @return \Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure|null
     */
    public function getUS_DOT_Disclosure()
    {
        return $this->US_DOT_Disclosure;
    }
    /**
     * Set US_DOT_Disclosure value
     * @param \Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure $uS_DOT_Disclosure
     * @return \Sabre\EnhancedAirBook\Structs\BaggageInfo
     */
    public function setUS_DOT_Disclosure(\Sabre\EnhancedAirBook\Structs\US_DOT_Disclosure $uS_DOT_Disclosure = null)
    {
        $this->US_DOT_Disclosure = $uS_DOT_Disclosure;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \Sabre\EnhancedAirBook\Structs\BaggageInfo
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}
