# -*- coding: utf-8 -*-

"""
zypev1

This file was automatically generated by APIMATIC v3.0 (
 https://www.apimatic.io ).
"""

from zypev1.decorators import lazy_property
from zypev1.configuration import Configuration
from zypev1.configuration import Environment
from zypev1.controllers.videos_controller import VideosController
from zypev1.controllers.playlists_controller import PlaylistsController
from zypev1.controllers.managing_playlist_relationships_controller\
    import ManagingPlaylistRelationshipsController
from zypev1.controllers.categories_controller import CategoriesController
from zypev1.controllers.apps_controller import AppsController
from zypev1.controllers.devices_controller import DevicesController
from zypev1.controllers.device_categories_controller\
    import DeviceCategoriesController
from zypev1.controllers.players_controller import PlayersController
from zypev1.controllers.master_manifests_controller\
    import MasterManifestsController
from zypev1.controllers.segments_controller import SegmentsController
from zypev1.controllers.video_imports_controller import VideoImportsController
from zypev1.controllers.video_sources_controller import VideoSourcesController
from zypev1.controllers.category_content_rules_controller\
    import CategoryContentRulesController
from zypev1.controllers.playlist_content_rules_controller\
    import PlaylistContentRulesController
from zypev1.controllers.video_content_rules_controller\
    import VideoContentRulesController
from zypev1.controllers.consumers_controller import ConsumersController
from zypev1.controllers.device_linking_controller\
    import DeviceLinkingController
from zypev1.controllers.o_auth_controller import OAuthController
from zypev1.controllers.video_entitlements_controller\
    import VideoEntitlementsController
from zypev1.controllers.playlist_entitlements_controller\
    import PlaylistEntitlementsController
from zypev1.controllers.subscription_entitlements_controller\
    import SubscriptionEntitlementsController
from zypev1.controllers.subscriptions_controller import SubscriptionsController
from zypev1.controllers.plans_controller import PlansController
from zypev1.controllers.transactions_controller import TransactionsController
from zypev1.controllers.redemption_codes_controller\
    import RedemptionCodesController
from zypev1.controllers.ad_tags_controller import AdTagsController
from zypev1.controllers.revenue_models_controller\
    import RevenueModelsController
from zypev1.controllers.video_favorites_controller\
    import VideoFavoritesController
from zypev1.controllers.zobject_types_controller import ZobjectTypesController
from zypev1.controllers.zobject_controller import ZobjectController


class Zypev1Client(object):

    @lazy_property
    def videos(self):
        return VideosController(self.config)

    @lazy_property
    def playlists(self):
        return PlaylistsController(self.config)

    @lazy_property
    def managing_playlist_relationships(self):
        return ManagingPlaylistRelationshipsController(self.config)

    @lazy_property
    def categories(self):
        return CategoriesController(self.config)

    @lazy_property
    def apps(self):
        return AppsController(self.config)

    @lazy_property
    def devices(self):
        return DevicesController(self.config)

    @lazy_property
    def device_categories(self):
        return DeviceCategoriesController(self.config)

    @lazy_property
    def players(self):
        return PlayersController(self.config)

    @lazy_property
    def master_manifests(self):
        return MasterManifestsController(self.config)

    @lazy_property
    def segments(self):
        return SegmentsController(self.config)

    @lazy_property
    def video_imports(self):
        return VideoImportsController(self.config)

    @lazy_property
    def video_sources(self):
        return VideoSourcesController(self.config)

    @lazy_property
    def category_content_rules(self):
        return CategoryContentRulesController(self.config)

    @lazy_property
    def playlist_content_rules(self):
        return PlaylistContentRulesController(self.config)

    @lazy_property
    def video_content_rules(self):
        return VideoContentRulesController(self.config)

    @lazy_property
    def consumers(self):
        return ConsumersController(self.config)

    @lazy_property
    def device_linking(self):
        return DeviceLinkingController(self.config)

    @lazy_property
    def o_auth(self):
        return OAuthController(self.config)

    @lazy_property
    def video_entitlements(self):
        return VideoEntitlementsController(self.config)

    @lazy_property
    def playlist_entitlements(self):
        return PlaylistEntitlementsController(self.config)

    @lazy_property
    def subscription_entitlements(self):
        return SubscriptionEntitlementsController(self.config)

    @lazy_property
    def subscriptions(self):
        return SubscriptionsController(self.config)

    @lazy_property
    def plans(self):
        return PlansController(self.config)

    @lazy_property
    def transactions(self):
        return TransactionsController(self.config)

    @lazy_property
    def redemption_codes(self):
        return RedemptionCodesController(self.config)

    @lazy_property
    def ad_tags(self):
        return AdTagsController(self.config)

    @lazy_property
    def revenue_models(self):
        return RevenueModelsController(self.config)

    @lazy_property
    def video_favorites(self):
        return VideoFavoritesController(self.config)

    @lazy_property
    def zobject_types(self):
        return ZobjectTypesController(self.config)

    @lazy_property
    def zobject(self):
        return ZobjectController(self.config)

    def __init__(self, http_client_instance=None,
                 override_http_client_configuration=False, timeout=60,
                 max_retries=0, backoff_factor=2,
                 retry_statuses=[408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
                 retry_methods=['GET', 'PUT'],
                 environment=Environment.PRODUCTION, config=None):
        if config is None:
            self.config = Configuration(
                                         http_client_instance=http_client_instance,
                                         override_http_client_configuration=override_http_client_configuration,
                                         timeout=timeout,
                                         max_retries=max_retries,
                                         backoff_factor=backoff_factor,
                                         retry_statuses=retry_statuses,
                                         retry_methods=retry_methods,
                                         environment=environment)
        else:
            self.config = config
