<?php

namespace Tricks\LaravelTools\Nova\Actions;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Actions\ActionResponse;
use Laravel\Nova\Fields\ActionFields;

class PreviewItem extends Action
{
    public $name = 'Vorschau anzeigen';

    /**
     * @param  Collection<int,Model>  $models
     */
    public function handle(ActionFields $fields, Collection $models): ActionResponse|Action
    {
        $frontend_url = config('laravel-tools.frontend.url');
        if (! is_string($frontend_url)) {
            return ActionResponse::danger('Diese Funktion steht bislang nicht zur Verfügung. Konfiguration ausstehend.');
        }
        /** @var Model $model */
        $model = $models->first();
        $model_class = $model::class;
        $frontend_mapping = config('laravel-tools.preview_mapping.'.$model_class);

        if (! is_string($frontend_mapping)) {
            return ActionResponse::danger('Die Vorschau steht für diese Ressource nicht zur Verfügung.');
        }

        $route_key = $model->getRouteKey();

        if (! is_scalar($route_key)) {
            return ActionResponse::danger('Die Vorschau steht für diesen Eintrag nicht zur Verfügung.');
        }

        $url = Str::finish($frontend_url, '/')
            .Str::finish($frontend_mapping, '/')
            .Str::finish((string) $route_key, '/')
            .'?preview=true';

        return ActionResponse::openInNewTab($url);
    }
}
