<?php

namespace App\Actions;

use App\Models\Instance;
use App\Services\Proxmox\ProxmoxClient;
use Illuminate\Support\Facades\Log;

/**
 * Die Cloud nach der Begleichung wieder hochfahren.
 *
 * Das Gegenstück zu SuspendInstance, und bewusst zusammen mit ihm gebaut:
 * getrennt gäbe es einen Weg hinunter und keinen zurück — und der einzige
 * Zustand, aus dem ein Kunde nicht selbst herausfindet, ist der, in dem seine
 * Cloud steht.
 */
class ResumeInstance
{
    public function __invoke(Instance $instance): void
    {
        if ($instance->suspended_at === null) {
            return;
        }

        $vmid = $instance->vmid;
        $node = $instance->host?->node ?? 'pve';

        if ($vmid !== null) {
            app(ProxmoxClient::class)->startVm($node, (int) $vmid);
        }

        // Die Marke fällt, NACHDEM gestartet wurde. Andersherum sähe ein
        // gleichzeitiger Tageslauf eine nicht gesperrte Instanz, die noch
        // steht — und ein Neustart, der scheitert, hinterliesse eine Cloud,
        // die niemand mehr als gesperrt erkennt.
        $instance->update(['suspended_at' => null]);

        Log::info('Cloud nach Begleichung wieder hochgefahren', [
            'instance' => $instance->uuid,
            'vmid' => $vmid,
        ]);
    }
}
