<?php

namespace App\Actions;

use App\Enums\ImageConversion;
use App\Models\Brochure;
use App\Models\Truck;
use Illuminate\Support\Facades\App;
use Lorisleiva\Actions\Concerns\AsAction;
use Spatie\LaravelPdf\Facades\Pdf;

class GenerateBrochureAction
{
    use AsAction;

    public function handle(Truck $truck, string $locale = 'en')
    {

        $featuredImage = $truck->media()->where('conversion_type', ImageConversion::ORIGINAL)->first();
        $mediaCollection = collect($truck->media()->where('conversion_type', ImageConversion::MEDIUM)->get());

        $formattedData = [
            'truck' => $truck,
            'featured_image' => $featuredImage,
            'header_media' => $mediaCollection
                ->skip(1)
                ->take(3)
                ->toArray(),
            'remaining_images' => $mediaCollection
                ->skip(4)
                ->take(8)
                ->toArray(),
        ];

        App::setLocale($locale);
        $brochureName = $this->generateBrochureName($truck, $locale);

        Pdf::view('pdf.content', $formattedData)
            ->withBrowsershot(function ($browsershot) {
                $browsershot
                    ->noSandbox()
                    ->addChromiumArguments([
                        '--disable-setuid-sandbox',
                        '--disable-dev-shm-usage',
                        '--disable-accelerated-2d-canvas',
                        '--disable-gpu',
                        '--single-process',
                    ]);
            })
            ->disk('public')
            ->save($brochureName);

        Brochure::updateOrCreate(
            [
                'truck_id' => $truck->id,
                'locale' => $locale,
            ],
            [
                'path' => $brochureName,
            ]
        );
    }

    public function generateBrochureName(Truck $truck, string $locale = 'en'): string
    {
        return 'brochures/'.$locale.'/'.$truck->slug.'.pdf';
    }
}
