<?php

declare(strict_types=1);

use App\Models\OperationRun;
use App\Services\Runbooks\FindingsLifecycleBackfillRunbookService;
use App\Services\Runbooks\FindingsLifecycleBackfillScope;
use App\Services\Runbooks\RunbookReason;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

it('delegates deploy-time runbooks to the shared runbook service', function () {
    $run = OperationRun::factory()->create();

    $this->mock(FindingsLifecycleBackfillRunbookService::class, function ($mock) use ($run): void {
        $mock->shouldReceive('start')
            ->once()
            ->withArgs(function ($scope, $initiator, $reason, $source): bool {
                return $scope instanceof FindingsLifecycleBackfillScope
                    && $scope->isAllTenants()
                    && $initiator === null
                    && $reason instanceof RunbookReason
                    && $source === 'deploy_hook';
            })
            ->andReturn($run);
    });

    $this->artisan('tenantpilot:run-deploy-runbooks')
        ->assertExitCode(0);
});
