# DO NOT EDIT! This file is automatically generated
import typing

if typing.TYPE_CHECKING:
    from commercetools.protocols import ClientProtocol

    from .api_clients import ApiClientService
    from .cart_discounts import CartDiscountService
    from .carts import CartService
    from .categories import CategoryService
    from .channels import ChannelService
    from .custom_objects import CustomObjectService
    from .customer_groups import CustomerGroupService
    from .customers import CustomerService
    from .discount_codes import DiscountCodeService
    from .extensions import ExtensionService
    from .graphqls import GraphqlService
    from .in_stores import In_StoreService
    from .inventory import InventoryEntryService
    from .login import LoginService
    from .me import MeService
    from .messages import MessageService
    from .orders import OrderService
    from .payments import PaymentService
    from .product_discounts import ProductDiscountService
    from .product_projections import ProductProjectionService
    from .product_types import ProductTypeService
    from .products import ProductService
    from .project import ProjectService
    from .reviews import ReviewService
    from .shipping_methods import ShippingMethodService
    from .shopping_lists import ShoppingListService
    from .states import StateService
    from .stores import StoreService
    from .subscriptions import SubscriptionService
    from .tax_categories import TaxCategoryService
    from .types import TypeService
    from .zones import ZoneService


class ServicesMixin:
    @property
    def categories(self: "ClientProtocol") -> "CategoryService":
        if "categories" not in self.__dict__:
            from .categories import CategoryService

            self.__dict__["categories"] = CategoryService(self)
        return self.__dict__["categories"]

    @property
    def carts(self: "ClientProtocol") -> "CartService":
        if "carts" not in self.__dict__:
            from .carts import CartService

            self.__dict__["carts"] = CartService(self)
        return self.__dict__["carts"]

    @property
    def cart_discounts(self: "ClientProtocol") -> "CartDiscountService":
        if "cart_discounts" not in self.__dict__:
            from .cart_discounts import CartDiscountService

            self.__dict__["cart_discounts"] = CartDiscountService(self)
        return self.__dict__["cart_discounts"]

    @property
    def channels(self: "ClientProtocol") -> "ChannelService":
        if "channels" not in self.__dict__:
            from .channels import ChannelService

            self.__dict__["channels"] = ChannelService(self)
        return self.__dict__["channels"]

    @property
    def customers(self: "ClientProtocol") -> "CustomerService":
        if "customers" not in self.__dict__:
            from .customers import CustomerService

            self.__dict__["customers"] = CustomerService(self)
        return self.__dict__["customers"]

    @property
    def customer_groups(self: "ClientProtocol") -> "CustomerGroupService":
        if "customer_groups" not in self.__dict__:
            from .customer_groups import CustomerGroupService

            self.__dict__["customer_groups"] = CustomerGroupService(self)
        return self.__dict__["customer_groups"]

    @property
    def custom_objects(self: "ClientProtocol") -> "CustomObjectService":
        if "custom_objects" not in self.__dict__:
            from .custom_objects import CustomObjectService

            self.__dict__["custom_objects"] = CustomObjectService(self)
        return self.__dict__["custom_objects"]

    @property
    def discount_codes(self: "ClientProtocol") -> "DiscountCodeService":
        if "discount_codes" not in self.__dict__:
            from .discount_codes import DiscountCodeService

            self.__dict__["discount_codes"] = DiscountCodeService(self)
        return self.__dict__["discount_codes"]

    @property
    def graphqls(self: "ClientProtocol") -> "GraphqlService":
        if "graphqls" not in self.__dict__:
            from .graphqls import GraphqlService

            self.__dict__["graphqls"] = GraphqlService(self)
        return self.__dict__["graphqls"]

    @property
    def inventory(self: "ClientProtocol") -> "InventoryEntryService":
        if "inventory" not in self.__dict__:
            from .inventory import InventoryEntryService

            self.__dict__["inventory"] = InventoryEntryService(self)
        return self.__dict__["inventory"]

    @property
    def login(self: "ClientProtocol") -> "LoginService":
        if "login" not in self.__dict__:
            from .login import LoginService

            self.__dict__["login"] = LoginService(self)
        return self.__dict__["login"]

    @property
    def messages(self: "ClientProtocol") -> "MessageService":
        if "messages" not in self.__dict__:
            from .messages import MessageService

            self.__dict__["messages"] = MessageService(self)
        return self.__dict__["messages"]

    @property
    def orders(self: "ClientProtocol") -> "OrderService":
        if "orders" not in self.__dict__:
            from .orders import OrderService

            self.__dict__["orders"] = OrderService(self)
        return self.__dict__["orders"]

    @property
    def payments(self: "ClientProtocol") -> "PaymentService":
        if "payments" not in self.__dict__:
            from .payments import PaymentService

            self.__dict__["payments"] = PaymentService(self)
        return self.__dict__["payments"]

    @property
    def products(self: "ClientProtocol") -> "ProductService":
        if "products" not in self.__dict__:
            from .products import ProductService

            self.__dict__["products"] = ProductService(self)
        return self.__dict__["products"]

    @property
    def product_discounts(self: "ClientProtocol") -> "ProductDiscountService":
        if "product_discounts" not in self.__dict__:
            from .product_discounts import ProductDiscountService

            self.__dict__["product_discounts"] = ProductDiscountService(self)
        return self.__dict__["product_discounts"]

    @property
    def product_projections(self: "ClientProtocol") -> "ProductProjectionService":
        if "product_projections" not in self.__dict__:
            from .product_projections import ProductProjectionService

            self.__dict__["product_projections"] = ProductProjectionService(self)
        return self.__dict__["product_projections"]

    @property
    def product_types(self: "ClientProtocol") -> "ProductTypeService":
        if "product_types" not in self.__dict__:
            from .product_types import ProductTypeService

            self.__dict__["product_types"] = ProductTypeService(self)
        return self.__dict__["product_types"]

    @property
    def reviews(self: "ClientProtocol") -> "ReviewService":
        if "reviews" not in self.__dict__:
            from .reviews import ReviewService

            self.__dict__["reviews"] = ReviewService(self)
        return self.__dict__["reviews"]

    @property
    def shipping_methods(self: "ClientProtocol") -> "ShippingMethodService":
        if "shipping_methods" not in self.__dict__:
            from .shipping_methods import ShippingMethodService

            self.__dict__["shipping_methods"] = ShippingMethodService(self)
        return self.__dict__["shipping_methods"]

    @property
    def shopping_lists(self: "ClientProtocol") -> "ShoppingListService":
        if "shopping_lists" not in self.__dict__:
            from .shopping_lists import ShoppingListService

            self.__dict__["shopping_lists"] = ShoppingListService(self)
        return self.__dict__["shopping_lists"]

    @property
    def states(self: "ClientProtocol") -> "StateService":
        if "states" not in self.__dict__:
            from .states import StateService

            self.__dict__["states"] = StateService(self)
        return self.__dict__["states"]

    @property
    def subscriptions(self: "ClientProtocol") -> "SubscriptionService":
        if "subscriptions" not in self.__dict__:
            from .subscriptions import SubscriptionService

            self.__dict__["subscriptions"] = SubscriptionService(self)
        return self.__dict__["subscriptions"]

    @property
    def tax_categories(self: "ClientProtocol") -> "TaxCategoryService":
        if "tax_categories" not in self.__dict__:
            from .tax_categories import TaxCategoryService

            self.__dict__["tax_categories"] = TaxCategoryService(self)
        return self.__dict__["tax_categories"]

    @property
    def types(self: "ClientProtocol") -> "TypeService":
        if "types" not in self.__dict__:
            from .types import TypeService

            self.__dict__["types"] = TypeService(self)
        return self.__dict__["types"]

    @property
    def zones(self: "ClientProtocol") -> "ZoneService":
        if "zones" not in self.__dict__:
            from .zones import ZoneService

            self.__dict__["zones"] = ZoneService(self)
        return self.__dict__["zones"]

    @property
    def me(self: "ClientProtocol") -> "MeService":
        if "me" not in self.__dict__:
            from .me import MeService

            self.__dict__["me"] = MeService(self)
        return self.__dict__["me"]

    @property
    def extensions(self: "ClientProtocol") -> "ExtensionService":
        if "extensions" not in self.__dict__:
            from .extensions import ExtensionService

            self.__dict__["extensions"] = ExtensionService(self)
        return self.__dict__["extensions"]

    @property
    def api_clients(self: "ClientProtocol") -> "ApiClientService":
        if "api_clients" not in self.__dict__:
            from .api_clients import ApiClientService

            self.__dict__["api_clients"] = ApiClientService(self)
        return self.__dict__["api_clients"]

    @property
    def stores(self: "ClientProtocol") -> "StoreService":
        if "stores" not in self.__dict__:
            from .stores import StoreService

            self.__dict__["stores"] = StoreService(self)
        return self.__dict__["stores"]

    @property
    def in_stores(self: "ClientProtocol") -> "In_StoreService":
        if "in_stores" not in self.__dict__:
            from .in_stores import In_StoreService

            self.__dict__["in_stores"] = In_StoreService(self)
        return self.__dict__["in_stores"]

    @property
    def project(self: "ClientProtocol") -> "ProjectService":
        if "project" not in self.__dict__:
            from .project import ProjectService

            self.__dict__["project"] = ProjectService(self)
        return self.__dict__["project"]
