<?php

namespace App\Services\PromptLandingPageEditor;

use App\Enums\PromptLandingPageVersionKind;
use App\Models\PromptLandingPage;
use App\Models\PromptLandingPageVersion;
use Illuminate\Support\Facades\DB;

class PublishVersion
{
    /**
     * @return array{html: string, css: string, js: string, version: int, kind: string}
     */
    public function handle(PromptLandingPage $page, PromptLandingPageVersion $version): array
    {
        abort_unless($version->prompt_landing_page_id === $page->id, 404);

        $html = (string) ($version->html ?? '');
        $css = (string) ($version->css ?? '');
        $js = (string) ($version->js ?? '');

        return DB::transaction(function () use ($page, $version, $html, $css, $js): array {
            $page->update([
                'html' => $html,
                'css' => $css,
                'js' => $js,
            ]);

            if ($version->kind !== PromptLandingPageVersionKind::Published) {
                $version->update([
                    'kind' => PromptLandingPageVersionKind::Published,
                ]);
            }

            $page->editorDraft?->delete();

            return [
                'html' => $html,
                'css' => $css,
                'js' => $js,
                'version' => $version->version,
                'kind' => PromptLandingPageVersionKind::Published->value,
            ];
        });
    }
}
