from abc import ABC, abstractmethod


class AgentGateway(ABC):
    """
    Abstract class representing the Agent Gateway interface.
    All agent gateway adapters must implement these methods.
    """

    @abstractmethod
    def on_message(self, client, userdata, msg):
        """
        Method to handle incoming messages from the agent.
        Parameters:
            client: MQTT client instance.
            userdata: Any additional user data passed to the MQTT client.
            msg: The MQTT message received from the agent.
        """
        pass

    @abstractmethod
    def connect(self):
        """
        Method to establish a connection to the agent.
        """
        pass

    @abstractmethod
    def start(self):
        """
        Method to start listening for messages from the agent.
        """
        pass

    @abstractmethod
    def stop(self):
        """
        Method to stop the agent gateway and clean up resources.
        """
        pass
