from core.models.SubscriptionPlan import SubscriptionPlan
from core.models.session.SessionProfile import SessionProfile
from core.models.system.SystemProfile import SystemProfile
from core.observers.ConnectionObserver import ConnectionObserver
from core.services.WebServiceApiService import WebServiceApiService
from typing import Union


class SubscriptionController:

    @staticmethod
    def get(billing_code: str, connection_observer: ConnectionObserver = None):

        from core.controllers.ConnectionController import ConnectionController
        return ConnectionController.with_preferred_connection(billing_code, task=WebServiceApiService.get_subscription, connection_observer=connection_observer)

    @staticmethod
    def create(subscription_plan: SubscriptionPlan, profile: Union[SessionProfile, SystemProfile], connection_observer: ConnectionObserver = None):

        from core.controllers.ConnectionController import ConnectionController
        return ConnectionController.with_preferred_connection(subscription_plan.id, profile.location.id, task=WebServiceApiService.post_subscription, connection_observer=connection_observer)