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

"""
uexcorpapi

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

from apimatic_core.configurations.global_configuration import GlobalConfiguration
from apimatic_core.decorators.lazy_property import LazyProperty
from uexcorpapi.configuration import Configuration
from uexcorpapi.controllers.base_controller import BaseController
from uexcorpapi.configuration import Environment
from uexcorpapi.http.auth.bearer import Bearer
from uexcorpapi.http.auth.api_key import ApiKey
from uexcorpapi.controllers.categories_controller import CategoriesController
from uexcorpapi.controllers.categories_attributes_controller\
    import CategoriesAttributesController
from uexcorpapi.controllers.cities_controller import CitiesController
from uexcorpapi.controllers.commodities_controller import CommoditiesController
from uexcorpapi.controllers.commodities_alerts_controller\
    import CommoditiesAlertsController
from uexcorpapi.controllers.m_id_commodity_controller\
    import MIdCommodityController
from uexcorpapi.controllers.m_commodity_code_controller\
    import MCommodityCodeController
from uexcorpapi.controllers.m_commodity_name_controller\
    import MCommodityNameController
from uexcorpapi.controllers.m_commodity_slug_controller\
    import MCommoditySlugController
from uexcorpapi.controllers.m_id_terminal_controller\
    import MIdTerminalController
from uexcorpapi.controllers.m_terminal_code_controller\
    import MTerminalCodeController
from uexcorpapi.controllers.m_terminal_name_controller\
    import MTerminalNameController
from uexcorpapi.controllers.m_terminal_slug_controller\
    import MTerminalSlugController
from uexcorpapi.controllers.commodities_prices_all_controller\
    import CommoditiesPricesAllController
from uexcorpapi.controllers.commodities_ranking_controller\
    import CommoditiesRankingController
from uexcorpapi.controllers.commodities_raw_prices_all_controller\
    import CommoditiesRawPricesAllController
from uexcorpapi.controllers.m_id_orbit_origin_controller\
    import MIdOrbitOriginController
from uexcorpapi.controllers.m_id_planet_origin_controller\
    import MIdPlanetOriginController
from uexcorpapi.controllers.m_id_terminal_origin_controller\
    import MIdTerminalOriginController
from uexcorpapi.controllers.commodities_status_controller\
    import CommoditiesStatusController
from uexcorpapi.controllers.companies_controller import CompaniesController
from uexcorpapi.controllers.contacts_controller import ContactsController
from uexcorpapi.controllers.contracts_controller import ContractsController
from uexcorpapi.controllers.m_specialization_controller\
    import MSpecializationController
from uexcorpapi.controllers.data_extract_controller\
    import DataExtractController
from uexcorpapi.controllers.data_parameters_controller\
    import DataParametersController
from uexcorpapi.controllers.factions_controller import FactionsController
from uexcorpapi.controllers.fleet_controller import FleetController
from uexcorpapi.controllers.fuel_prices_all_controller\
    import FuelPricesAllController
from uexcorpapi.controllers.game_versions_controller\
    import GameVersionsController
from uexcorpapi.controllers.m_id_category_controller\
    import MIdCategoryController
from uexcorpapi.controllers.m_id_company_controller import MIdCompanyController
from uexcorpapi.controllers.m_size_controller import MSizeController
from uexcorpapi.controllers.m_uuid_controller import MUuidController
from uexcorpapi.controllers.m_id_item_controller import MIdItemController
from uexcorpapi.controllers.items_prices_all_controller\
    import ItemsPricesAllController
from uexcorpapi.controllers.jump_points_controller import JumpPointsController
from uexcorpapi.controllers.jurisdictions_controller\
    import JurisdictionsController
from uexcorpapi.controllers.marketplace_favorites_controller\
    import MarketplaceFavoritesController
from uexcorpapi.controllers.marketplace_listings_controller\
    import MarketplaceListingsController
from uexcorpapi.controllers.moons_controller import MoonsController
from uexcorpapi.controllers.orbits_controller import OrbitsController
from uexcorpapi.controllers.orbits_distances_controller\
    import OrbitsDistancesController
from uexcorpapi.controllers.m_id_organization_controller\
    import MIdOrganizationController
from uexcorpapi.controllers.m_slug_controller import MSlugController
from uexcorpapi.controllers.outposts_controller import OutpostsController
from uexcorpapi.controllers.planets_controller import PlanetsController
from uexcorpapi.controllers.poi_controller import PoiController
from uexcorpapi.controllers.refineries_audits_controller\
    import RefineriesAuditsController
from uexcorpapi.controllers.refineries_capacities_controller\
    import RefineriesCapacitiesController
from uexcorpapi.controllers.refineries_methods_controller\
    import RefineriesMethodsController
from uexcorpapi.controllers.refineries_yields_controller\
    import RefineriesYieldsController
from uexcorpapi.controllers.release_notes_controller\
    import ReleaseNotesController
from uexcorpapi.controllers.space_stations_controller\
    import SpaceStationsController
from uexcorpapi.controllers.star_systems_controller\
    import StarSystemsController
from uexcorpapi.controllers.terminals_controller import TerminalsController
from uexcorpapi.controllers.terminals_distances_controller\
    import TerminalsDistancesController
from uexcorpapi.controllers.user_controller import UserController
from uexcorpapi.controllers.user_refineries_jobs_controller\
    import UserRefineriesJobsController
from uexcorpapi.controllers.user_trades_controller import UserTradesController
from uexcorpapi.controllers.vehicles_controller import VehiclesController
from uexcorpapi.controllers.vehicles_loaners_controller\
    import VehiclesLoanersController
from uexcorpapi.controllers.vehicles_prices_controller\
    import VehiclesPricesController
from uexcorpapi.controllers.vehicles_purchases_prices_all_controller\
    import VehiclesPurchasesPricesAllController
from uexcorpapi.controllers.vehicles_rentals_prices_all_controller\
    import VehiclesRentalsPricesAllController
from uexcorpapi.controllers.wallet_balance_controller\
    import WalletBalanceController


class UexcorpapiClient(object):
    @LazyProperty
    def categories(self):
        return CategoriesController(self.global_configuration)

    @LazyProperty
    def categories_attributes(self):
        return CategoriesAttributesController(self.global_configuration)

    @LazyProperty
    def cities(self):
        return CitiesController(self.global_configuration)

    @LazyProperty
    def commodities(self):
        return CommoditiesController(self.global_configuration)

    @LazyProperty
    def commodities_alerts(self):
        return CommoditiesAlertsController(self.global_configuration)

    @LazyProperty
    def m_id_commodity(self):
        return MIdCommodityController(self.global_configuration)

    @LazyProperty
    def m_commodity_code(self):
        return MCommodityCodeController(self.global_configuration)

    @LazyProperty
    def m_commodity_name(self):
        return MCommodityNameController(self.global_configuration)

    @LazyProperty
    def m_commodity_slug(self):
        return MCommoditySlugController(self.global_configuration)

    @LazyProperty
    def m_id_terminal(self):
        return MIdTerminalController(self.global_configuration)

    @LazyProperty
    def m_terminal_code(self):
        return MTerminalCodeController(self.global_configuration)

    @LazyProperty
    def m_terminal_name(self):
        return MTerminalNameController(self.global_configuration)

    @LazyProperty
    def m_terminal_slug(self):
        return MTerminalSlugController(self.global_configuration)

    @LazyProperty
    def commodities_prices_all(self):
        return CommoditiesPricesAllController(self.global_configuration)

    @LazyProperty
    def commodities_ranking(self):
        return CommoditiesRankingController(self.global_configuration)

    @LazyProperty
    def commodities_raw_prices_all(self):
        return CommoditiesRawPricesAllController(self.global_configuration)

    @LazyProperty
    def m_id_orbit_origin(self):
        return MIdOrbitOriginController(self.global_configuration)

    @LazyProperty
    def m_id_planet_origin(self):
        return MIdPlanetOriginController(self.global_configuration)

    @LazyProperty
    def m_id_terminal_origin(self):
        return MIdTerminalOriginController(self.global_configuration)

    @LazyProperty
    def commodities_status(self):
        return CommoditiesStatusController(self.global_configuration)

    @LazyProperty
    def companies(self):
        return CompaniesController(self.global_configuration)

    @LazyProperty
    def contacts(self):
        return ContactsController(self.global_configuration)

    @LazyProperty
    def contracts(self):
        return ContractsController(self.global_configuration)

    @LazyProperty
    def m_specialization(self):
        return MSpecializationController(self.global_configuration)

    @LazyProperty
    def data_extract(self):
        return DataExtractController(self.global_configuration)

    @LazyProperty
    def data_parameters(self):
        return DataParametersController(self.global_configuration)

    @LazyProperty
    def factions(self):
        return FactionsController(self.global_configuration)

    @LazyProperty
    def fleet(self):
        return FleetController(self.global_configuration)

    @LazyProperty
    def fuel_prices_all(self):
        return FuelPricesAllController(self.global_configuration)

    @LazyProperty
    def game_versions(self):
        return GameVersionsController(self.global_configuration)

    @LazyProperty
    def m_id_category(self):
        return MIdCategoryController(self.global_configuration)

    @LazyProperty
    def m_id_company(self):
        return MIdCompanyController(self.global_configuration)

    @LazyProperty
    def m_size(self):
        return MSizeController(self.global_configuration)

    @LazyProperty
    def m_uuid(self):
        return MUuidController(self.global_configuration)

    @LazyProperty
    def m_id_item(self):
        return MIdItemController(self.global_configuration)

    @LazyProperty
    def items_prices_all(self):
        return ItemsPricesAllController(self.global_configuration)

    @LazyProperty
    def jump_points(self):
        return JumpPointsController(self.global_configuration)

    @LazyProperty
    def jurisdictions(self):
        return JurisdictionsController(self.global_configuration)

    @LazyProperty
    def marketplace_favorites(self):
        return MarketplaceFavoritesController(self.global_configuration)

    @LazyProperty
    def marketplace_listings(self):
        return MarketplaceListingsController(self.global_configuration)

    @LazyProperty
    def moons(self):
        return MoonsController(self.global_configuration)

    @LazyProperty
    def orbits(self):
        return OrbitsController(self.global_configuration)

    @LazyProperty
    def orbits_distances(self):
        return OrbitsDistancesController(self.global_configuration)

    @LazyProperty
    def m_id_organization(self):
        return MIdOrganizationController(self.global_configuration)

    @LazyProperty
    def m_slug(self):
        return MSlugController(self.global_configuration)

    @LazyProperty
    def outposts(self):
        return OutpostsController(self.global_configuration)

    @LazyProperty
    def planets(self):
        return PlanetsController(self.global_configuration)

    @LazyProperty
    def poi(self):
        return PoiController(self.global_configuration)

    @LazyProperty
    def refineries_audits(self):
        return RefineriesAuditsController(self.global_configuration)

    @LazyProperty
    def refineries_capacities(self):
        return RefineriesCapacitiesController(self.global_configuration)

    @LazyProperty
    def refineries_methods(self):
        return RefineriesMethodsController(self.global_configuration)

    @LazyProperty
    def refineries_yields(self):
        return RefineriesYieldsController(self.global_configuration)

    @LazyProperty
    def release_notes(self):
        return ReleaseNotesController(self.global_configuration)

    @LazyProperty
    def space_stations(self):
        return SpaceStationsController(self.global_configuration)

    @LazyProperty
    def star_systems(self):
        return StarSystemsController(self.global_configuration)

    @LazyProperty
    def terminals(self):
        return TerminalsController(self.global_configuration)

    @LazyProperty
    def terminals_distances(self):
        return TerminalsDistancesController(self.global_configuration)

    @LazyProperty
    def user(self):
        return UserController(self.global_configuration)

    @LazyProperty
    def user_refineries_jobs(self):
        return UserRefineriesJobsController(self.global_configuration)

    @LazyProperty
    def user_trades(self):
        return UserTradesController(self.global_configuration)

    @LazyProperty
    def vehicles(self):
        return VehiclesController(self.global_configuration)

    @LazyProperty
    def vehicles_loaners(self):
        return VehiclesLoanersController(self.global_configuration)

    @LazyProperty
    def vehicles_prices(self):
        return VehiclesPricesController(self.global_configuration)

    @LazyProperty
    def vehicles_purchases_prices_all(self):
        return VehiclesPurchasesPricesAllController(self.global_configuration)

    @LazyProperty
    def vehicles_rentals_prices_all(self):
        return VehiclesRentalsPricesAllController(self.global_configuration)

    @LazyProperty
    def wallet_balance(self):
        return WalletBalanceController(self.global_configuration)

    def __init__(self, http_client_instance=None,
                 override_http_client_configuration=False, http_call_back=None,
                 timeout=30, max_retries=0, backoff_factor=2,
                 retry_statuses=None, retry_methods=None,
                 logging_configuration=None, environment=Environment.PRODUCTION,
                 bearer_credentials=None, api_key_credentials=None,
                 config=None):
        self.config = config or Configuration(
            http_client_instance=http_client_instance,
            override_http_client_configuration=override_http_client_configuration,
            http_call_back=http_call_back, timeout=timeout,
            max_retries=max_retries, backoff_factor=backoff_factor,
            retry_statuses=retry_statuses, retry_methods=retry_methods,
            logging_configuration=logging_configuration,
            environment=environment, bearer_credentials=bearer_credentials,
            api_key_credentials=api_key_credentials)

        self.global_configuration = GlobalConfiguration(self.config)\
            .global_errors(BaseController.global_errors())\
            .base_uri_executor(self.config.get_base_uri)\
            .user_agent(BaseController.user_agent(), BaseController.user_agent_parameters())

        self.auth_managers = {key: None for key in ['bearer', 'apiKey']}
        self.auth_managers['bearer'] = Bearer(self.config.bearer_credentials)
        self.auth_managers['apiKey'] = ApiKey(self.config.api_key_credentials)
        self.global_configuration = self.global_configuration.auth_managers(self.auth_managers)

