<?php

namespace App\Services\PromptLandingPageEditor;

use App\Enums\PromptLandingPageVersionKind;
use App\Models\PromptLandingPage;
use App\Models\PromptLandingPageVersion;

class DeleteDraftVersion
{
    public function handle(PromptLandingPage $page, PromptLandingPageVersion $version): void
    {
        abort_unless($version->prompt_landing_page_id === $page->id, 404);
        abort_unless($version->version !== 1, 422, 'The original generated page cannot be deleted.');
        abort_unless(! $this->isLiveVersion($page, $version), 422, 'The live page cannot be deleted.');

        $version->delete();
    }

    private function isLiveVersion(PromptLandingPage $page, PromptLandingPageVersion $version): bool
    {
        $liveHtml = (string) ($page->html ?? '');
        $liveCss = (string) ($page->css ?? '');
        $liveJs = (string) ($page->js ?? '');

        $liveVersionNumber = $page->versions()
            ->where('kind', PromptLandingPageVersionKind::Published)
            ->get()
            ->filter(function (PromptLandingPageVersion $candidate) use ($liveHtml, $liveCss, $liveJs): bool {
                return (string) ($candidate->html ?? '') === $liveHtml
                    && (string) ($candidate->css ?? '') === $liveCss
                    && (string) ($candidate->js ?? '') === $liveJs;
            })
            ->max('version');

        return $liveVersionNumber !== null && $version->version === (int) $liveVersionNumber;
    }
}
