# coding: utf-8

"""
    MINDBODY Public API

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

    OpenAPI spec version: v6
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from swagger_client.models.location import Location  # noqa: F401,E501
from swagger_client.models.program import Program  # noqa: F401,E501
from swagger_client.models.session_type import SessionType  # noqa: F401,E501
from swagger_client.models.staff import Staff  # noqa: F401,E501


class Availability(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'int',
        'staff': 'Staff',
        'session_type': 'SessionType',
        'programs': 'list[Program]',
        'start_date_time': 'datetime',
        'end_date_time': 'datetime',
        'bookable_end_date_time': 'datetime',
        'location': 'Location'
    }

    attribute_map = {
        'id': 'Id',
        'staff': 'Staff',
        'session_type': 'SessionType',
        'programs': 'Programs',
        'start_date_time': 'StartDateTime',
        'end_date_time': 'EndDateTime',
        'bookable_end_date_time': 'BookableEndDateTime',
        'location': 'Location'
    }

    def __init__(self, id=None, staff=None, session_type=None, programs=None, start_date_time=None, end_date_time=None, bookable_end_date_time=None, location=None):  # noqa: E501
        """Availability - a model defined in Swagger"""  # noqa: E501

        self._id = None
        self._staff = None
        self._session_type = None
        self._programs = None
        self._start_date_time = None
        self._end_date_time = None
        self._bookable_end_date_time = None
        self._location = None
        self.discriminator = None

        if id is not None:
            self.id = id
        if staff is not None:
            self.staff = staff
        if session_type is not None:
            self.session_type = session_type
        if programs is not None:
            self.programs = programs
        if start_date_time is not None:
            self.start_date_time = start_date_time
        if end_date_time is not None:
            self.end_date_time = end_date_time
        if bookable_end_date_time is not None:
            self.bookable_end_date_time = bookable_end_date_time
        if location is not None:
            self.location = location

    @property
    def id(self):
        """Gets the id of this Availability.  # noqa: E501

        The ID of the availability.  # noqa: E501

        :return: The id of this Availability.  # noqa: E501
        :rtype: int
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this Availability.

        The ID of the availability.  # noqa: E501

        :param id: The id of this Availability.  # noqa: E501
        :type: int
        """

        self._id = id

    @property
    def staff(self):
        """Gets the staff of this Availability.  # noqa: E501

        Contains information about staff members.  # noqa: E501

        :return: The staff of this Availability.  # noqa: E501
        :rtype: Staff
        """
        return self._staff

    @staff.setter
    def staff(self, staff):
        """Sets the staff of this Availability.

        Contains information about staff members.  # noqa: E501

        :param staff: The staff of this Availability.  # noqa: E501
        :type: Staff
        """

        self._staff = staff

    @property
    def session_type(self):
        """Gets the session_type of this Availability.  # noqa: E501

        Contains information about the types of sessions.  # noqa: E501

        :return: The session_type of this Availability.  # noqa: E501
        :rtype: SessionType
        """
        return self._session_type

    @session_type.setter
    def session_type(self, session_type):
        """Sets the session_type of this Availability.

        Contains information about the types of sessions.  # noqa: E501

        :param session_type: The session_type of this Availability.  # noqa: E501
        :type: SessionType
        """

        self._session_type = session_type

    @property
    def programs(self):
        """Gets the programs of this Availability.  # noqa: E501

        Contains information about the programs.  # noqa: E501

        :return: The programs of this Availability.  # noqa: E501
        :rtype: list[Program]
        """
        return self._programs

    @programs.setter
    def programs(self, programs):
        """Sets the programs of this Availability.

        Contains information about the programs.  # noqa: E501

        :param programs: The programs of this Availability.  # noqa: E501
        :type: list[Program]
        """

        self._programs = programs

    @property
    def start_date_time(self):
        """Gets the start_date_time of this Availability.  # noqa: E501

        The date and time the availability starts.  # noqa: E501

        :return: The start_date_time of this Availability.  # noqa: E501
        :rtype: datetime
        """
        return self._start_date_time

    @start_date_time.setter
    def start_date_time(self, start_date_time):
        """Sets the start_date_time of this Availability.

        The date and time the availability starts.  # noqa: E501

        :param start_date_time: The start_date_time of this Availability.  # noqa: E501
        :type: datetime
        """

        self._start_date_time = start_date_time

    @property
    def end_date_time(self):
        """Gets the end_date_time of this Availability.  # noqa: E501

        The date and time the availability ends.  # noqa: E501

        :return: The end_date_time of this Availability.  # noqa: E501
        :rtype: datetime
        """
        return self._end_date_time

    @end_date_time.setter
    def end_date_time(self, end_date_time):
        """Sets the end_date_time of this Availability.

        The date and time the availability ends.  # noqa: E501

        :param end_date_time: The end_date_time of this Availability.  # noqa: E501
        :type: datetime
        """

        self._end_date_time = end_date_time

    @property
    def bookable_end_date_time(self):
        """Gets the bookable_end_date_time of this Availability.  # noqa: E501

        The time of day that the last appointment can start.  # noqa: E501

        :return: The bookable_end_date_time of this Availability.  # noqa: E501
        :rtype: datetime
        """
        return self._bookable_end_date_time

    @bookable_end_date_time.setter
    def bookable_end_date_time(self, bookable_end_date_time):
        """Sets the bookable_end_date_time of this Availability.

        The time of day that the last appointment can start.  # noqa: E501

        :param bookable_end_date_time: The bookable_end_date_time of this Availability.  # noqa: E501
        :type: datetime
        """

        self._bookable_end_date_time = bookable_end_date_time

    @property
    def location(self):
        """Gets the location of this Availability.  # noqa: E501

        Contains information about the location.  # noqa: E501

        :return: The location of this Availability.  # noqa: E501
        :rtype: Location
        """
        return self._location

    @location.setter
    def location(self, location):
        """Sets the location of this Availability.

        Contains information about the location.  # noqa: E501

        :param location: The location of this Availability.  # noqa: E501
        :type: Location
        """

        self._location = location

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}