from app.workflow.actions import BaseAction
from app.core.event import eventmanager
from app.schemas import ActionParams, ActionContext
from app.schemas.types import ChainEventType


class SendEventParams(ActionParams):
    """
    发送事件参数
    """
    pass


class SendEventAction(BaseAction):
    """
    发送事件
    """

    contract = {}

    @classmethod
    @property
    def name(cls) -> str: # noqa
        return "发送事件"

    @classmethod
    @property
    def description(cls) -> str: # noqa
        return "发送任务执行事件"

    @classmethod
    @property
    def data(cls) -> dict: # noqa
        return SendEventParams().model_dump()

    @property
    def success(self) -> bool:
        return self.done

    def execute(self, workflow_id: int, params: dict, context: ActionContext) -> ActionContext:
        """
        发送工作流事件，以更插件干预工作流执行
        """
        # 触发资源下载事件，更新执行上下文
        event = eventmanager.send_event(ChainEventType.WorkflowExecution, context)
        if event and event.event_data:
            context = event.event_data

        self.job_done()
        return context
