<?php

namespace Modules\Workflows\Services\Actions;

use Modules\Workflows\Services\ApprovalService;

class ApproveAction implements ActionInterface {
    private string $tenantId;

    public function __construct(string $tenantId) {
        $this->tenantId = $tenantId;
    }

    public function execute(array $config, array $context): array {
        // Ação de aprovação - cria uma aprovação e pausa o workflow
        $executionId = $context['execution_id'] ?? null;
        $workflowId = $config['workflow_id'] ?? null;
        $nodeId = $config['node_id'] ?? '';

        if (!$executionId || !$workflowId) {
            throw new \Exception('Execution ID e Workflow ID são obrigatórios para aprovação');
        }

        // Obter aprovadores da configuração
        $aprovadores = $config['aprovadores'] ?? [];
        if (empty($aprovadores)) {
            throw new \Exception('Aprovadores são obrigatórios');
        }

        // Criar aprovação
        $approvalService = new ApprovalService($this->tenantId);
        $approvalId = $approvalService->createApproval(
            $executionId,
            $workflowId,
            $nodeId,
            $config,
            $context
        );

        return [
            'approved' => false, // Ainda não aprovado, aguardando aprovação
            'approval_id' => $approvalId,
            'status' => 'pending',
            'message' => 'Aprovação criada, aguardando aprovação dos responsáveis'
        ];
    }
}

