<?php

namespace App\Http\Controllers;

use App\Models\Image;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ImageController extends Controller
{
    // Muestra todas las imágenes
    public function index()
    {
        $images = Image::latest()->paginate(12);
        return view('images.index', compact('images'));
    }

    // Muestra el formulario de carga
    public function create()
    {
        return view('images.create');
    }

    // Guarda la imagen en el servidor y en la base de datos
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'alt' => 'nullable|string|max:255',
            'image' => 'required|image|max:2048',
        ]);

        $path = $request->file('image')->store('images', 'public');

        Image::create([
            'name' => $request->name,
            'alt' => $request->alt,
            'path' => $path,
        ]);

        return redirect()->route('images.index')->with('success', 'Imagen subida correctamente');
    }

    // Muestra una imagen específica (opcional)
    public function show(Image $image)
    {
        return view('images.show', compact('image'));
    }

    // Muestra el formulario de edición
    public function edit(Image $image)
    {
        return view('images.edit', compact('image'));
    }

    // Actualiza la información (y opcionalmente la imagen)
    public function update(Request $request, Image $image)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'alt' => 'nullable|string|max:255',
            'image' => 'nullable|image|max:2048',
        ]);

        if ($request->hasFile('image')) {
            // Eliminar la anterior si existe
            Storage::disk('public')->delete($image->path);
            $path = $request->file('image')->store('images', 'public');
            $image->path = $path;
        }

        $image->name = $request->name;
        $image->alt = $request->alt;
        $image->save();

        return redirect()->route('images.index')->with('success', 'Imagen actualizada correctamente');
    }

    // Elimina la imagen del disco y la base de datos
    public function destroy(Image $image)
    {
        Storage::disk('public')->delete($image->path);
        $image->delete();

        return redirect()->route('images.index')->with('success', 'Imagen eliminada correctamente');
    }
}
