from .eventbrite_service import EventbriteService
from .shopify_service import ShopifyService
from .bigcommerce_service import BigCommerceService


class IntegrationsService:
    """Service to handle interaction with external integrations.

    This service manages the interaction with external integrations, such as Shopify and Eventbrite.

    Attributes:
        None
    """

    @staticmethod
    def create_single_use_discount_code(
        discount_value,
        discount_type,
        offer_integration_data,
        client_integration_data,
        offer_info,
    ):

        if not offer_integration_data:
            print("Missing offer integration data.")
            return None
        if not client_integration_data:
            print("Missing client integration data.")
            return None
        if offer_integration_data.get("shopify"):
            return ShopifyService.create_single_use_discount_code(
                client_integration_data["shopify"]["storeName"],
                client_integration_data["shopify"]["accessToken"],
                offer_integration_data["shopify"]["priceRuleID"],
            )
        if "bigCommerce" in offer_integration_data:
            print("hitting the bigcomm conditional")
            return BigCommerceService.create_single_use_discount_code(
                client_integration_data["bigCommerce"]["storePath"],
                client_integration_data["bigCommerce"]["authToken"],
                client_integration_data["bigCommerce"]["authClient"],
                offer_info["offerName"],
                offer_info["percentOrCashOff"],
                offer_info["compensation"],
                offer_info["minPurchaseAmount"],
                offer_info["expirationLimit"],
            )
        elif offer_integration_data.get("eventbrite"):
            return EventbriteService.create_event_discount_code(
                client_integration_data["eventbrite"]["organizationID"],
                offer_integration_data["eventbrite"]["eventID"],
                client_integration_data["eventbrite"]["accessToken"],
                discount_value,
                discount_type,
            )
        # (add more rewards integrations here)
        else:

            print("hitting the end else")

            return None


    @staticmethod
    def initiate_cashback_offer(cashback_percentage, client_integration_data, email):
        if not client_integration_data:
            print("Missing client integration data.")
            return None

        return ShopifyService.send_cashback(
            client_integration_data["shopify"]["storeName"],
            email,
            cashback_percentage,
            client_integration_data["shopify"]["accessToken"],
        )