from a2a.server.events import EventQueue
from a2a.utils import new_agent_text_message

import a2a_acl
from a2a_acl.agent.acl_agent import ACLAgentExecutor
from a2a_acl.content_codecs.common import natural_language_id

from a2a_acl.protocol.acl_message import ACLMessage
from a2a_acl.a2a_utils.send_message import sync_reply

from a2a_acl.interface import asi_parser
from a2a_acl.interface.interface import ACLAgentCard


my_card = asi_parser.read_file("validator.asi").add_codecs([natural_language_id])


class ValidatorAgentExecutor(ACLAgentExecutor):

    def __init__(self, card: ACLAgentCard, url):
        super().__init__(agentcard=card, my_url=url)
        print(
            "Warning: launching a pure python A2A agent, unable to check .asi interface against python body."
        )

    async def execute_achieve(
        self,
        m: ACLMessage,
        output_event_queue: EventQueue,
    ):
        pass

    async def execute_tell(
        self,
        m: ACLMessage,
        output_event_queue: EventQueue,
    ):
        print("Received: " + str(m))
        print("Do you validate " + m.content + "?")
        res = input("[Y/N/Q]\n")
        match res:
            case "Y":
                print("Validated. (" + res + ")")
                await sync_reply(output_event_queue, "valid")
            case "Q":
                print("Quit. (" + res + ")")
                await sync_reply(output_event_queue, "quit")
            case _:
                print("Not Validated. (" + res + ")")
                await sync_reply(output_event_queue, "invalid")
        return

    async def execute_ask(
        self,
        m: ACLMessage,
        output_event_queue: EventQueue,
    ):
        pass
