<?php

namespace App\Http\Controllers;

use App\Models\Service;
use App\Models\Setting;
use App\Services\FileConversionService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class ServiceImageController extends Controller
{
    public function storeKeyVisual(Request $request, Service $service): RedirectResponse
    {
        return $this->store($request, $service, 'key_visual_filename', 'current_key_visual');
    }

    public function storeBackground(Request $request, Service $service): RedirectResponse
    {
        return $this->store($request, $service, 'background_filename', 'current_background');
    }

    private function store(Request $request, Service $service, string $column, string $settingKey): RedirectResponse
    {
        $request->validate([
            'file' => ['required', 'file', 'mimes:jpg,jpeg,png', 'max:20480'],
            'scope' => ['required', Rule::in(['service', 'default'])],
        ], [
            'file.required' => 'Bitte wähle eine Bilddatei aus.',
            'file.file' => 'Die hochgeladene Datei ist ungültig.',
            'file.mimes' => 'Nur Bilddateien (jpg, png) sind erlaubt.',
            'file.max' => 'Die Datei darf maximal 20 MB groß sein.',
            'scope.required' => 'Bitte wähle einen Geltungsbereich.',
            'scope.in' => 'Der gewählte Geltungsbereich ist ungültig.',
        ]);

        $result = app(FileConversionService::class)->convertImageCover($request->file('file'));

        $service->update([$column => $result['filename']]);

        if ($request->input('scope') === 'default') {
            Setting::set($settingKey, $result['filename']);
        }

        return back()->with('success', 'Bild wurde gespeichert.');
    }
}
