<?php
/**
 * SearchResultsDropLocation
 *
 * PHP version 5
 *
 * @category Class
 * @package  UPS\Locator
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * Locator
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * 
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 3.0.50
 */
/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace UPS\Locator\Locator;

use \ArrayAccess;
use \UPS\Locator\ObjectSerializer;

/**
 * SearchResultsDropLocation Class Doc Comment
 *
 * @category Class
 * @package  UPS\Locator
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class SearchResultsDropLocation implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $swaggerModelName = 'SearchResults_DropLocation';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'location_id' => 'string',
        'origin_or_destination' => 'string',
        'ivr' => '\UPS\Locator\Locator\DropLocationIVR',
        'geocode' => '\UPS\Locator\Locator\DropLocationGeocode',
        'address_key_format' => '\UPS\Locator\Locator\DropLocationAddressKeyFormat',
        'phone_number' => 'string[]',
        'fax_number' => 'string',
        'e_mail_address' => 'string',
        'location_attribute' => '\UPS\Locator\Locator\DropLocationLocationAttribute[]',
        'distance' => '\UPS\Locator\Locator\DropLocationDistance',
        'special_instructions' => '\UPS\Locator\Locator\DropLocationSpecialInstructions[]',
        'latest_ground_drop_off_time' => 'string[]',
        'latest_air_drop_off_time' => 'string[]',
        'additional_charge_indicator' => 'string',
        'standard_hours_of_operation' => 'string',
        'non_standard_hours_of_operation' => 'string',
        'will_call_hours_of_operation' => 'string',
        'number' => 'string',
        'home_page_url' => 'string',
        'comments' => 'string',
        'additional_comments' => '\UPS\Locator\Locator\DropLocationAdditionalComments',
        'disclaimer' => 'string[]',
        'slic' => 'string',
        'timezone' => 'string',
        'facility_type' => 'string',
        'operating_hours' => '\UPS\Locator\Locator\DropLocationOperatingHours',
        'localized_instruction' => '\UPS\Locator\Locator\DropLocationLocalizedInstruction[]',
        'promotion_information' => '\UPS\Locator\Locator\DropLocationPromotionInformation[]',
        'sort_code' => '\UPS\Locator\Locator\DropLocationSortCode',
        'service_offering_list' => '\UPS\Locator\Locator\DropLocationServiceOfferingList',
        'display_phone_number_indicator' => 'string',
        'access_point_information' => '\UPS\Locator\Locator\DropLocationAccessPointInformation',
        'location_image' => '\UPS\Locator\Locator\DropLocationLocationImage',
        'location_new_indicator' => 'string',
        'promotional_link_url' => 'string',
        'featured_rank' => 'string',
        'will_call_location_indicator' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'location_id' => null,
        'origin_or_destination' => null,
        'ivr' => null,
        'geocode' => null,
        'address_key_format' => null,
        'phone_number' => null,
        'fax_number' => null,
        'e_mail_address' => null,
        'location_attribute' => null,
        'distance' => null,
        'special_instructions' => null,
        'latest_ground_drop_off_time' => null,
        'latest_air_drop_off_time' => null,
        'additional_charge_indicator' => null,
        'standard_hours_of_operation' => null,
        'non_standard_hours_of_operation' => null,
        'will_call_hours_of_operation' => null,
        'number' => null,
        'home_page_url' => null,
        'comments' => null,
        'additional_comments' => null,
        'disclaimer' => null,
        'slic' => null,
        'timezone' => null,
        'facility_type' => null,
        'operating_hours' => null,
        'localized_instruction' => null,
        'promotion_information' => null,
        'sort_code' => null,
        'service_offering_list' => null,
        'display_phone_number_indicator' => null,
        'access_point_information' => null,
        'location_image' => null,
        'location_new_indicator' => null,
        'promotional_link_url' => null,
        'featured_rank' => null,
        'will_call_location_indicator' => null
    ];

    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'location_id' => 'LocationID',
        'origin_or_destination' => 'OriginOrDestination',
        'ivr' => 'IVR',
        'geocode' => 'Geocode',
        'address_key_format' => 'AddressKeyFormat',
        'phone_number' => 'PhoneNumber',
        'fax_number' => 'FaxNumber',
        'e_mail_address' => 'EMailAddress',
        'location_attribute' => 'LocationAttribute',
        'distance' => 'Distance',
        'special_instructions' => 'SpecialInstructions',
        'latest_ground_drop_off_time' => 'LatestGroundDropOffTime',
        'latest_air_drop_off_time' => 'LatestAirDropOffTime',
        'additional_charge_indicator' => 'AdditionalChargeIndicator',
        'standard_hours_of_operation' => 'StandardHoursOfOperation',
        'non_standard_hours_of_operation' => 'NonStandardHoursOfOperation',
        'will_call_hours_of_operation' => 'WillCallHoursOfOperation',
        'number' => 'Number',
        'home_page_url' => 'HomePageURL',
        'comments' => 'Comments',
        'additional_comments' => 'AdditionalComments',
        'disclaimer' => 'Disclaimer',
        'slic' => 'SLIC',
        'timezone' => 'Timezone',
        'facility_type' => 'FacilityType',
        'operating_hours' => 'OperatingHours',
        'localized_instruction' => 'LocalizedInstruction',
        'promotion_information' => 'PromotionInformation',
        'sort_code' => 'SortCode',
        'service_offering_list' => 'ServiceOfferingList',
        'display_phone_number_indicator' => 'DisplayPhoneNumberIndicator',
        'access_point_information' => 'AccessPointInformation',
        'location_image' => 'LocationImage',
        'location_new_indicator' => 'LocationNewIndicator',
        'promotional_link_url' => 'PromotionalLinkURL',
        'featured_rank' => 'FeaturedRank',
        'will_call_location_indicator' => 'WillCallLocationIndicator'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'location_id' => 'setLocationId',
        'origin_or_destination' => 'setOriginOrDestination',
        'ivr' => 'setIvr',
        'geocode' => 'setGeocode',
        'address_key_format' => 'setAddressKeyFormat',
        'phone_number' => 'setPhoneNumber',
        'fax_number' => 'setFaxNumber',
        'e_mail_address' => 'setEMailAddress',
        'location_attribute' => 'setLocationAttribute',
        'distance' => 'setDistance',
        'special_instructions' => 'setSpecialInstructions',
        'latest_ground_drop_off_time' => 'setLatestGroundDropOffTime',
        'latest_air_drop_off_time' => 'setLatestAirDropOffTime',
        'additional_charge_indicator' => 'setAdditionalChargeIndicator',
        'standard_hours_of_operation' => 'setStandardHoursOfOperation',
        'non_standard_hours_of_operation' => 'setNonStandardHoursOfOperation',
        'will_call_hours_of_operation' => 'setWillCallHoursOfOperation',
        'number' => 'setNumber',
        'home_page_url' => 'setHomePageUrl',
        'comments' => 'setComments',
        'additional_comments' => 'setAdditionalComments',
        'disclaimer' => 'setDisclaimer',
        'slic' => 'setSlic',
        'timezone' => 'setTimezone',
        'facility_type' => 'setFacilityType',
        'operating_hours' => 'setOperatingHours',
        'localized_instruction' => 'setLocalizedInstruction',
        'promotion_information' => 'setPromotionInformation',
        'sort_code' => 'setSortCode',
        'service_offering_list' => 'setServiceOfferingList',
        'display_phone_number_indicator' => 'setDisplayPhoneNumberIndicator',
        'access_point_information' => 'setAccessPointInformation',
        'location_image' => 'setLocationImage',
        'location_new_indicator' => 'setLocationNewIndicator',
        'promotional_link_url' => 'setPromotionalLinkUrl',
        'featured_rank' => 'setFeaturedRank',
        'will_call_location_indicator' => 'setWillCallLocationIndicator'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'location_id' => 'getLocationId',
        'origin_or_destination' => 'getOriginOrDestination',
        'ivr' => 'getIvr',
        'geocode' => 'getGeocode',
        'address_key_format' => 'getAddressKeyFormat',
        'phone_number' => 'getPhoneNumber',
        'fax_number' => 'getFaxNumber',
        'e_mail_address' => 'getEMailAddress',
        'location_attribute' => 'getLocationAttribute',
        'distance' => 'getDistance',
        'special_instructions' => 'getSpecialInstructions',
        'latest_ground_drop_off_time' => 'getLatestGroundDropOffTime',
        'latest_air_drop_off_time' => 'getLatestAirDropOffTime',
        'additional_charge_indicator' => 'getAdditionalChargeIndicator',
        'standard_hours_of_operation' => 'getStandardHoursOfOperation',
        'non_standard_hours_of_operation' => 'getNonStandardHoursOfOperation',
        'will_call_hours_of_operation' => 'getWillCallHoursOfOperation',
        'number' => 'getNumber',
        'home_page_url' => 'getHomePageUrl',
        'comments' => 'getComments',
        'additional_comments' => 'getAdditionalComments',
        'disclaimer' => 'getDisclaimer',
        'slic' => 'getSlic',
        'timezone' => 'getTimezone',
        'facility_type' => 'getFacilityType',
        'operating_hours' => 'getOperatingHours',
        'localized_instruction' => 'getLocalizedInstruction',
        'promotion_information' => 'getPromotionInformation',
        'sort_code' => 'getSortCode',
        'service_offering_list' => 'getServiceOfferingList',
        'display_phone_number_indicator' => 'getDisplayPhoneNumberIndicator',
        'access_point_information' => 'getAccessPointInformation',
        'location_image' => 'getLocationImage',
        'location_new_indicator' => 'getLocationNewIndicator',
        'promotional_link_url' => 'getPromotionalLinkUrl',
        'featured_rank' => 'getFeaturedRank',
        'will_call_location_indicator' => 'getWillCallLocationIndicator'
    ];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }

    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$swaggerModelName;
    }



    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['location_id'] = isset($data['location_id']) ? $data['location_id'] : null;
        $this->container['origin_or_destination'] = isset($data['origin_or_destination']) ? $data['origin_or_destination'] : null;
        $this->container['ivr'] = isset($data['ivr']) ? $data['ivr'] : null;
        $this->container['geocode'] = isset($data['geocode']) ? $data['geocode'] : null;
        $this->container['address_key_format'] = isset($data['address_key_format']) ? $data['address_key_format'] : null;
        $this->container['phone_number'] = isset($data['phone_number']) ? $data['phone_number'] : null;
        $this->container['fax_number'] = isset($data['fax_number']) ? $data['fax_number'] : null;
        $this->container['e_mail_address'] = isset($data['e_mail_address']) ? $data['e_mail_address'] : null;
        $this->container['location_attribute'] = isset($data['location_attribute']) ? $data['location_attribute'] : null;
        $this->container['distance'] = isset($data['distance']) ? $data['distance'] : null;
        $this->container['special_instructions'] = isset($data['special_instructions']) ? $data['special_instructions'] : null;
        $this->container['latest_ground_drop_off_time'] = isset($data['latest_ground_drop_off_time']) ? $data['latest_ground_drop_off_time'] : null;
        $this->container['latest_air_drop_off_time'] = isset($data['latest_air_drop_off_time']) ? $data['latest_air_drop_off_time'] : null;
        $this->container['additional_charge_indicator'] = isset($data['additional_charge_indicator']) ? $data['additional_charge_indicator'] : null;
        $this->container['standard_hours_of_operation'] = isset($data['standard_hours_of_operation']) ? $data['standard_hours_of_operation'] : null;
        $this->container['non_standard_hours_of_operation'] = isset($data['non_standard_hours_of_operation']) ? $data['non_standard_hours_of_operation'] : null;
        $this->container['will_call_hours_of_operation'] = isset($data['will_call_hours_of_operation']) ? $data['will_call_hours_of_operation'] : null;
        $this->container['number'] = isset($data['number']) ? $data['number'] : null;
        $this->container['home_page_url'] = isset($data['home_page_url']) ? $data['home_page_url'] : null;
        $this->container['comments'] = isset($data['comments']) ? $data['comments'] : null;
        $this->container['additional_comments'] = isset($data['additional_comments']) ? $data['additional_comments'] : null;
        $this->container['disclaimer'] = isset($data['disclaimer']) ? $data['disclaimer'] : null;
        $this->container['slic'] = isset($data['slic']) ? $data['slic'] : null;
        $this->container['timezone'] = isset($data['timezone']) ? $data['timezone'] : null;
        $this->container['facility_type'] = isset($data['facility_type']) ? $data['facility_type'] : null;
        $this->container['operating_hours'] = isset($data['operating_hours']) ? $data['operating_hours'] : null;
        $this->container['localized_instruction'] = isset($data['localized_instruction']) ? $data['localized_instruction'] : null;
        $this->container['promotion_information'] = isset($data['promotion_information']) ? $data['promotion_information'] : null;
        $this->container['sort_code'] = isset($data['sort_code']) ? $data['sort_code'] : null;
        $this->container['service_offering_list'] = isset($data['service_offering_list']) ? $data['service_offering_list'] : null;
        $this->container['display_phone_number_indicator'] = isset($data['display_phone_number_indicator']) ? $data['display_phone_number_indicator'] : null;
        $this->container['access_point_information'] = isset($data['access_point_information']) ? $data['access_point_information'] : null;
        $this->container['location_image'] = isset($data['location_image']) ? $data['location_image'] : null;
        $this->container['location_new_indicator'] = isset($data['location_new_indicator']) ? $data['location_new_indicator'] : null;
        $this->container['promotional_link_url'] = isset($data['promotional_link_url']) ? $data['promotional_link_url'] : null;
        $this->container['featured_rank'] = isset($data['featured_rank']) ? $data['featured_rank'] : null;
        $this->container['will_call_location_indicator'] = isset($data['will_call_location_indicator']) ? $data['will_call_location_indicator'] : null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];

        if ($this->container['location_id'] === null) {
            $invalidProperties[] = "'location_id' can't be null";
        }
        if ($this->container['origin_or_destination'] === null) {
            $invalidProperties[] = "'origin_or_destination' can't be null";
        }
        if ($this->container['ivr'] === null) {
            $invalidProperties[] = "'ivr' can't be null";
        }
        if ($this->container['geocode'] === null) {
            $invalidProperties[] = "'geocode' can't be null";
        }
        if ($this->container['address_key_format'] === null) {
            $invalidProperties[] = "'address_key_format' can't be null";
        }
        if ($this->container['phone_number'] === null) {
            $invalidProperties[] = "'phone_number' can't be null";
        }
        if ($this->container['location_attribute'] === null) {
            $invalidProperties[] = "'location_attribute' can't be null";
        }
        if ($this->container['distance'] === null) {
            $invalidProperties[] = "'distance' can't be null";
        }
        if ($this->container['timezone'] === null) {
            $invalidProperties[] = "'timezone' can't be null";
        }
        return $invalidProperties;
    }

    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return count($this->listInvalidProperties()) === 0;
    }


    /**
     * Gets location_id
     *
     * @return string
     */
    public function getLocationId()
    {
        return $this->container['location_id'];
    }

    /**
     * Sets location_id
     *
     * @param string $location_id The location ID that corresponds to the UPS location. Do not expose the Location ID.
     *
     * @return $this
     */
    public function setLocationId($location_id)
    {
        $this->container['location_id'] = $location_id;

        return $this;
    }

    /**
     * Gets origin_or_destination
     *
     * @return string
     */
    public function getOriginOrDestination()
    {
        return $this->container['origin_or_destination'];
    }

    /**
     * Sets origin_or_destination
     *
     * @param string $origin_or_destination OriginOrDestination will returned for FreightWillCallRequestType 1 Postal based and 3 City and/or State based search.   OriginOrDestination will be 01 for origin facilities and 02 for Destination facilities
     *
     * @return $this
     */
    public function setOriginOrDestination($origin_or_destination)
    {
        $this->container['origin_or_destination'] = $origin_or_destination;

        return $this;
    }

    /**
     * Gets ivr
     *
     * @return \UPS\Locator\Locator\DropLocationIVR
     */
    public function getIvr()
    {
        return $this->container['ivr'];
    }

    /**
     * Sets ivr
     *
     * @param \UPS\Locator\Locator\DropLocationIVR $ivr ivr
     *
     * @return $this
     */
    public function setIvr($ivr)
    {
        $this->container['ivr'] = $ivr;

        return $this;
    }

    /**
     * Gets geocode
     *
     * @return \UPS\Locator\Locator\DropLocationGeocode
     */
    public function getGeocode()
    {
        return $this->container['geocode'];
    }

    /**
     * Sets geocode
     *
     * @param \UPS\Locator\Locator\DropLocationGeocode $geocode geocode
     *
     * @return $this
     */
    public function setGeocode($geocode)
    {
        $this->container['geocode'] = $geocode;

        return $this;
    }

    /**
     * Gets address_key_format
     *
     * @return \UPS\Locator\Locator\DropLocationAddressKeyFormat
     */
    public function getAddressKeyFormat()
    {
        return $this->container['address_key_format'];
    }

    /**
     * Sets address_key_format
     *
     * @param \UPS\Locator\Locator\DropLocationAddressKeyFormat $address_key_format address_key_format
     *
     * @return $this
     */
    public function setAddressKeyFormat($address_key_format)
    {
        $this->container['address_key_format'] = $address_key_format;

        return $this;
    }

    /**
     * Gets phone_number
     *
     * @return string[]
     */
    public function getPhoneNumber()
    {
        return $this->container['phone_number'];
    }

    /**
     * Sets phone_number
     *
     * @param string[] $phone_number The UPS locations Phone number. A phone number of the location will be returned.  10 digits allowed for US, otherwise 1..15 digits allowed.  The phone number will be returned as a string.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setPhoneNumber($phone_number)
    {
        $this->container['phone_number'] = $phone_number;

        return $this;
    }

    /**
     * Gets fax_number
     *
     * @return string
     */
    public function getFaxNumber()
    {
        return $this->container['fax_number'];
    }

    /**
     * Sets fax_number
     *
     * @param string $fax_number The UPS location's Fax number. A fax number of the location will be returned when available.  10 digits allowed for US, otherwise 1..15 digits allowed. The fax number will be returned as string.
     *
     * @return $this
     */
    public function setFaxNumber($fax_number)
    {
        $this->container['fax_number'] = $fax_number;

        return $this;
    }

    /**
     * Gets e_mail_address
     *
     * @return string
     */
    public function getEMailAddress()
    {
        return $this->container['e_mail_address'];
    }

    /**
     * Sets e_mail_address
     *
     * @param string $e_mail_address Email address of the UPS location. Returned when available.
     *
     * @return $this
     */
    public function setEMailAddress($e_mail_address)
    {
        $this->container['e_mail_address'] = $e_mail_address;

        return $this;
    }

    /**
     * Gets location_attribute
     *
     * @return \UPS\Locator\Locator\DropLocationLocationAttribute[]
     */
    public function getLocationAttribute()
    {
        return $this->container['location_attribute'];
    }

    /**
     * Sets location_attribute
     *
     * @param \UPS\Locator\Locator\DropLocationLocationAttribute[] $location_attribute OptionType is a container that indicates the type of the location attribute.  There are 4 types of attributes.  They are: Location, Retail Location, Additional Services and Program Type.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setLocationAttribute($location_attribute)
    {
        $this->container['location_attribute'] = $location_attribute;

        return $this;
    }

    /**
     * Gets distance
     *
     * @return \UPS\Locator\Locator\DropLocationDistance
     */
    public function getDistance()
    {
        return $this->container['distance'];
    }

    /**
     * Sets distance
     *
     * @param \UPS\Locator\Locator\DropLocationDistance $distance distance
     *
     * @return $this
     */
    public function setDistance($distance)
    {
        $this->container['distance'] = $distance;

        return $this;
    }

    /**
     * Gets special_instructions
     *
     * @return \UPS\Locator\Locator\DropLocationSpecialInstructions[]
     */
    public function getSpecialInstructions()
    {
        return $this->container['special_instructions'];
    }

    /**
     * Sets special_instructions
     *
     * @param \UPS\Locator\Locator\DropLocationSpecialInstructions[] $special_instructions Walking directions.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setSpecialInstructions($special_instructions)
    {
        $this->container['special_instructions'] = $special_instructions;

        return $this;
    }

    /**
     * Gets latest_ground_drop_off_time
     *
     * @return string[]
     */
    public function getLatestGroundDropOffTime()
    {
        return $this->container['latest_ground_drop_off_time'];
    }

    /**
     * Sets latest_ground_drop_off_time
     *
     * @param string[] $latest_ground_drop_off_time The latest ground time the users can Drop-off the package at the location to be picked up. The time information is based on the time at the UPS location.  When a user specifies a Drop-off Time and Ground as the Service Type, the locations that have latest Drop-off times equal to or later than the specified Drop-off time and service type are returned.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setLatestGroundDropOffTime($latest_ground_drop_off_time)
    {
        $this->container['latest_ground_drop_off_time'] = $latest_ground_drop_off_time;

        return $this;
    }

    /**
     * Gets latest_air_drop_off_time
     *
     * @return string[]
     */
    public function getLatestAirDropOffTime()
    {
        return $this->container['latest_air_drop_off_time'];
    }

    /**
     * Sets latest_air_drop_off_time
     *
     * @param string[] $latest_air_drop_off_time The latest airtime the users can Drop-off the package at the location to be picked up. The time information is based on the time at the UPS location.  When a user specifies a Drop-off Time and Air as the Service Type, the locations that have latest Drop-off times equal to or later than the specified Drop-off time and service type are returned.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setLatestAirDropOffTime($latest_air_drop_off_time)
    {
        $this->container['latest_air_drop_off_time'] = $latest_air_drop_off_time;

        return $this;
    }

    /**
     * Gets additional_charge_indicator
     *
     * @return string
     */
    public function getAdditionalChargeIndicator()
    {
        return $this->container['additional_charge_indicator'];
    }

    /**
     * Sets additional_charge_indicator
     *
     * @param string $additional_charge_indicator Presence or Absence Indicator. If present, Indicates if the UPS location would have an additional charge. ASO locations will require an additional charge.
     *
     * @return $this
     */
    public function setAdditionalChargeIndicator($additional_charge_indicator)
    {
        $this->container['additional_charge_indicator'] = $additional_charge_indicator;

        return $this;
    }

    /**
     * Gets standard_hours_of_operation
     *
     * @return string
     */
    public function getStandardHoursOfOperation()
    {
        return $this->container['standard_hours_of_operation'];
    }

    /**
     * Sets standard_hours_of_operation
     *
     * @param string $standard_hours_of_operation The standard hours of operation of the drop location will be returned when available. The location's time may differ because of holidays.
     *
     * @return $this
     */
    public function setStandardHoursOfOperation($standard_hours_of_operation)
    {
        $this->container['standard_hours_of_operation'] = $standard_hours_of_operation;

        return $this;
    }

    /**
     * Gets non_standard_hours_of_operation
     *
     * @return string
     */
    public function getNonStandardHoursOfOperation()
    {
        return $this->container['non_standard_hours_of_operation'];
    }

    /**
     * Sets non_standard_hours_of_operation
     *
     * @param string $non_standard_hours_of_operation The non-standard hours of operation of the drop location. The location's time may differ because of holidays, weekends, or other factors that are beyond the locations control. Seven days preceding a given holiday the Non Standard Hours Of Operation will be returned along with the standard hours of operation if available.
     *
     * @return $this
     */
    public function setNonStandardHoursOfOperation($non_standard_hours_of_operation)
    {
        $this->container['non_standard_hours_of_operation'] = $non_standard_hours_of_operation;

        return $this;
    }

    /**
     * Gets will_call_hours_of_operation
     *
     * @return string
     */
    public function getWillCallHoursOfOperation()
    {
        return $this->container['will_call_hours_of_operation'];
    }

    /**
     * Sets will_call_hours_of_operation
     *
     * @param string $will_call_hours_of_operation The will call hours of operation of the drop location will be returned when available. The location's time may differ because of holidays.
     *
     * @return $this
     */
    public function setWillCallHoursOfOperation($will_call_hours_of_operation)
    {
        $this->container['will_call_hours_of_operation'] = $will_call_hours_of_operation;

        return $this;
    }

    /**
     * Gets number
     *
     * @return string
     */
    public function getNumber()
    {
        return $this->container['number'];
    }

    /**
     * Sets number
     *
     * @param string $number The center number of the drop location if it is The UPS store.
     *
     * @return $this
     */
    public function setNumber($number)
    {
        $this->container['number'] = $number;

        return $this;
    }

    /**
     * Gets home_page_url
     *
     * @return string
     */
    public function getHomePageUrl()
    {
        return $this->container['home_page_url'];
    }

    /**
     * Sets home_page_url
     *
     * @param string $home_page_url The home page URL of the drop location if it is The UPS store.
     *
     * @return $this
     */
    public function setHomePageUrl($home_page_url)
    {
        $this->container['home_page_url'] = $home_page_url;

        return $this;
    }

    /**
     * Gets comments
     *
     * @return string
     */
    public function getComments()
    {
        return $this->container['comments'];
    }

    /**
     * Sets comments
     *
     * @param string $comments Comments returned about the location. Text will be displayed in English or the locale given in the request. If Country Code is FR, and locale passed in the request is \"fr_FR\" then text will be displayed in French language, else comment will be displayed in English language.
     *
     * @return $this
     */
    public function setComments($comments)
    {
        $this->container['comments'] = $comments;

        return $this;
    }

    /**
     * Gets additional_comments
     *
     * @return \UPS\Locator\Locator\DropLocationAdditionalComments
     */
    public function getAdditionalComments()
    {
        return $this->container['additional_comments'];
    }

    /**
     * Sets additional_comments
     *
     * @param \UPS\Locator\Locator\DropLocationAdditionalComments $additional_comments additional_comments
     *
     * @return $this
     */
    public function setAdditionalComments($additional_comments)
    {
        $this->container['additional_comments'] = $additional_comments;

        return $this;
    }

    /**
     * Gets disclaimer
     *
     * @return string[]
     */
    public function getDisclaimer()
    {
        return $this->container['disclaimer'];
    }

    /**
     * Sets disclaimer
     *
     * @param string[] $disclaimer Textual disclaimer about the drop location.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setDisclaimer($disclaimer)
    {
        $this->container['disclaimer'] = $disclaimer;

        return $this;
    }

    /**
     * Gets slic
     *
     * @return string
     */
    public function getSlic()
    {
        return $this->container['slic'];
    }

    /**
     * Sets slic
     *
     * @param string $slic SLIC.
     *
     * @return $this
     */
    public function setSlic($slic)
    {
        $this->container['slic'] = $slic;

        return $this;
    }

    /**
     * Gets timezone
     *
     * @return string
     */
    public function getTimezone()
    {
        return $this->container['timezone'];
    }

    /**
     * Sets timezone
     *
     * @param string $timezone TimeZone.
     *
     * @return $this
     */
    public function setTimezone($timezone)
    {
        $this->container['timezone'] = $timezone;

        return $this;
    }

    /**
     * Gets facility_type
     *
     * @return string
     */
    public function getFacilityType()
    {
        return $this->container['facility_type'];
    }

    /**
     * Sets facility_type
     *
     * @param string $facility_type PKG/FRT.
     *
     * @return $this
     */
    public function setFacilityType($facility_type)
    {
        $this->container['facility_type'] = $facility_type;

        return $this;
    }

    /**
     * Gets operating_hours
     *
     * @return \UPS\Locator\Locator\DropLocationOperatingHours
     */
    public function getOperatingHours()
    {
        return $this->container['operating_hours'];
    }

    /**
     * Sets operating_hours
     *
     * @param \UPS\Locator\Locator\DropLocationOperatingHours $operating_hours operating_hours
     *
     * @return $this
     */
    public function setOperatingHours($operating_hours)
    {
        $this->container['operating_hours'] = $operating_hours;

        return $this;
    }

    /**
     * Gets localized_instruction
     *
     * @return \UPS\Locator\Locator\DropLocationLocalizedInstruction[]
     */
    public function getLocalizedInstruction()
    {
        return $this->container['localized_instruction'];
    }

    /**
     * Sets localized_instruction
     *
     * @param \UPS\Locator\Locator\DropLocationLocalizedInstruction[] $localized_instruction LocalizedInstruction container. Applicable for SearchOptionCode 01, 02, 03.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setLocalizedInstruction($localized_instruction)
    {
        $this->container['localized_instruction'] = $localized_instruction;

        return $this;
    }

    /**
     * Gets promotion_information
     *
     * @return \UPS\Locator\Locator\DropLocationPromotionInformation[]
     */
    public function getPromotionInformation()
    {
        return $this->container['promotion_information'];
    }

    /**
     * Sets promotion_information
     *
     * @param \UPS\Locator\Locator\DropLocationPromotionInformation[] $promotion_information Container to hold any promotion text for the location. Text will be displayed in English or the locale given in the request.  **NOTE:** For versions >= v2, this element will always be returned as an array. For requests using version = v1, this element will be returned as an array if there is more than one object and a single object if there is only 1.
     *
     * @return $this
     */
    public function setPromotionInformation($promotion_information)
    {
        $this->container['promotion_information'] = $promotion_information;

        return $this;
    }

    /**
     * Gets sort_code
     *
     * @return \UPS\Locator\Locator\DropLocationSortCode
     */
    public function getSortCode()
    {
        return $this->container['sort_code'];
    }

    /**
     * Sets sort_code
     *
     * @param \UPS\Locator\Locator\DropLocationSortCode $sort_code sort_code
     *
     * @return $this
     */
    public function setSortCode($sort_code)
    {
        $this->container['sort_code'] = $sort_code;

        return $this;
    }

    /**
     * Gets service_offering_list
     *
     * @return \UPS\Locator\Locator\DropLocationServiceOfferingList
     */
    public function getServiceOfferingList()
    {
        return $this->container['service_offering_list'];
    }

    /**
     * Sets service_offering_list
     *
     * @param \UPS\Locator\Locator\DropLocationServiceOfferingList $service_offering_list service_offering_list
     *
     * @return $this
     */
    public function setServiceOfferingList($service_offering_list)
    {
        $this->container['service_offering_list'] = $service_offering_list;

        return $this;
    }

    /**
     * Gets display_phone_number_indicator
     *
     * @return string
     */
    public function getDisplayPhoneNumberIndicator()
    {
        return $this->container['display_phone_number_indicator'];
    }

    /**
     * Sets display_phone_number_indicator
     *
     * @param string $display_phone_number_indicator Valid Values:  0-Do not display phone number 1-Display phone number.  This indicator will be returned only for the contact type Telephone number. This indicator is used by the clients to determine whether to display the telephone number to the end user.
     *
     * @return $this
     */
    public function setDisplayPhoneNumberIndicator($display_phone_number_indicator)
    {
        $this->container['display_phone_number_indicator'] = $display_phone_number_indicator;

        return $this;
    }

    /**
     * Gets access_point_information
     *
     * @return \UPS\Locator\Locator\DropLocationAccessPointInformation
     */
    public function getAccessPointInformation()
    {
        return $this->container['access_point_information'];
    }

    /**
     * Sets access_point_information
     *
     * @param \UPS\Locator\Locator\DropLocationAccessPointInformation $access_point_information access_point_information
     *
     * @return $this
     */
    public function setAccessPointInformation($access_point_information)
    {
        $this->container['access_point_information'] = $access_point_information;

        return $this;
    }

    /**
     * Gets location_image
     *
     * @return \UPS\Locator\Locator\DropLocationLocationImage
     */
    public function getLocationImage()
    {
        return $this->container['location_image'];
    }

    /**
     * Sets location_image
     *
     * @param \UPS\Locator\Locator\DropLocationLocationImage $location_image location_image
     *
     * @return $this
     */
    public function setLocationImage($location_image)
    {
        $this->container['location_image'] = $location_image;

        return $this;
    }

    /**
     * Gets location_new_indicator
     *
     * @return string
     */
    public function getLocationNewIndicator()
    {
        return $this->container['location_new_indicator'];
    }

    /**
     * Sets location_new_indicator
     *
     * @param string $location_new_indicator Indicator for new location.
     *
     * @return $this
     */
    public function setLocationNewIndicator($location_new_indicator)
    {
        $this->container['location_new_indicator'] = $location_new_indicator;

        return $this;
    }

    /**
     * Gets promotional_link_url
     *
     * @return string
     */
    public function getPromotionalLinkUrl()
    {
        return $this->container['promotional_link_url'];
    }

    /**
     * Sets promotional_link_url
     *
     * @param string $promotional_link_url Promotional link URL for specific location.
     *
     * @return $this
     */
    public function setPromotionalLinkUrl($promotional_link_url)
    {
        $this->container['promotional_link_url'] = $promotional_link_url;

        return $this;
    }

    /**
     * Gets featured_rank
     *
     * @return string
     */
    public function getFeaturedRank()
    {
        return $this->container['featured_rank'];
    }

    /**
     * Sets featured_rank
     *
     * @param string $featured_rank Feature Ranking values: Null or blank - Location is not featured.  1 - Featured Location ranked number 1. 2 - Featured Location ranked number 2.
     *
     * @return $this
     */
    public function setFeaturedRank($featured_rank)
    {
        $this->container['featured_rank'] = $featured_rank;

        return $this;
    }

    /**
     * Gets will_call_location_indicator
     *
     * @return string
     */
    public function getWillCallLocationIndicator()
    {
        return $this->container['will_call_location_indicator'];
    }

    /**
     * Sets will_call_location_indicator
     *
     * @param string $will_call_location_indicator Will Call Location Indicator values: - Y – Signifies a Will Call location that serves the customers address. - N - Signifies it is not a Will Call location.  Will Call locations are only returned with a \\\"Y\\\" indicator if the request included EnhancedSearchOption code 10.
     *
     * @return $this
     */
    public function setWillCallLocationIndicator($will_call_location_indicator)
    {
        $this->container['will_call_location_indicator'] = $will_call_location_indicator;

        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param integer $offset Offset
     *
     * @return boolean
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }

    /**
     * Sets value based on offset.
     *
     * @param integer $offset Offset
     * @param mixed   $value  Value to be set
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     *
     * @param integer $offset Offset
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) { // use JSON pretty print
            return json_encode(
                ObjectSerializer::sanitizeForSerialization($this),
                JSON_PRETTY_PRINT
            );
        }

        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}
