<?php

namespace App\Actions;

use App\Enums\ImageConversion;
use App\Models\Media;
use App\Models\Truck;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\ImageManager;
use Lorisleiva\Actions\Concerns\AsAction;

class AddMediumImageConversion
{
    use AsAction;

    public function handle(Truck $truck, Media $media): void
    {
        $storagePath = $media->path;

        if (! Storage::disk('public')->exists($storagePath)) {
            return;
        }

        $mediumPath = str_replace($media->name, 'medium-'.$media->name, $storagePath);

        $manager = new ImageManager(new Driver());

        $image = $manager->read(Storage::disk('public')->get($storagePath));
        $image->scale(width: 300);
        $image->save(Storage::disk('public')->path($mediumPath), 80);

        $truck->media()->updateOrCreate(
            [
                'name' => $media->name,
                'path' => $mediumPath,
                'conversion_type' => ImageConversion::MEDIUM->value,
            ],
            [
                'name' => $media->name,
                'path' => $mediumPath,
                'original_url' => $media->original_url,
            ]
        );
    }
}
