<?php declare(strict_types=1);
namespace App\StartPlatz\Bundle\AcceleratorBundle\EventSubscriber;
use App\StartPlatz\Bundle\AcceleratorBundle\Event\AcceleratorReviewStatusChangedEvent;
use App\StartPlatz\Ecosystem\Evidence\SystemEvidenceRecorder;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Records evidence for Accelerator review status changes (UP-113 Status-Evidenz-Matrix).
*
* Pattern: Same as GsEvidenceSubscriber — listens to domain events, delegates to SystemEvidenceRecorder.
* The controller dispatches AcceleratorReviewStatusChangedEvent after workflow transition;
* this subscriber maps the transition name to the correct evidence recording method.
*/
class AcceleratorEvidenceSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly SystemEvidenceRecorder $evidenceRecorder
) {}
public static function getSubscribedEvents(): array
{
return [
AcceleratorReviewStatusChangedEvent::class => 'onReviewStatusChanged',
];
}
public function onReviewStatusChanged(AcceleratorReviewStatusChangedEvent $event): void
{
$app = $event->application;
$applicationId = $app->getId();
$batchId = $app->getBatchId();
$documentedBy = $event->documentedBy;
match ($event->transition) {
'reject_before_interview' => $this->evidenceRecorder->documentRejectedBeforeInterview($applicationId, $batchId, $documentedBy),
'invite_to_interview' => $this->evidenceRecorder->documentInterviewInvited($applicationId, $batchId, $documentedBy),
'reject_after_interview' => $this->evidenceRecorder->documentRejectedAfterInterview($applicationId, $batchId, $documentedBy),
'offer_spot' => $this->evidenceRecorder->documentSpotOffered($applicationId, $batchId, $documentedBy),
'accept_spot' => $this->evidenceRecorder->documentSpotAccepted($applicationId, $batchId, $documentedBy),
default => null, // 'discuss' has no evidence by design (UP-113 Matrix row 3)
};
}
}