from abc import ABCMeta, abstractmethod
from xml.etree import cElementTree as eTree

from interactor.route.order_insert_payment_interactor.dto \
    import OrderInsertPaymentRequest
from interactor.route.electronic_payment_send_responses_interactor.dto \
    import PeripheralElectronicPaymentSendResponsesRequest


class FiscalServiceModel(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def process_order_fiscal(self, model, pos_ot):
        # type: (eTree, object) -> None

        raise NotImplementedError

    @abstractmethod
    def process_payment(self, model, request):
        # type: (eTree, OrderInsertPaymentRequest) -> None

        raise NotImplementedError

    @abstractmethod
    def send_electronic_payment_message_response(self, model, request):
        # type: (eTree, PeripheralElectronicPaymentSendResponsesRequest) -> None

        raise NotImplementedError
