<?php

namespace App\Http\Controllers;

use App\Models\Gallery;
use App\Models\Floor;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class GalleryController extends Controller
{
    public function index()
    {
        $galleries = Gallery::with('floor')->get();
        return view('galleries.index', compact('galleries'));
    }

    public function create()
    {
        $floors = Floor::all();
        $galleries = Gallery::all();
        return view('galleries.create', compact('floors','galleries'));
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'floor_id' => 'required|exists:floors,id',
            'gallery_name' => 'required|string|max:255',
            'gallery_icon_path' => 'nullable|image',
            'language' => 'required',
            'short_description' => 'nullable|string',
            'next_gallery_id' => 'nullable|exists:galleries,id',
            'previous_gallery_id' => 'nullable|exists:galleries,id',
        ]);

       if ($request->hasFile('gallery_icon_path')) {
            $data['gallery_icon_path'] = $request->file('gallery_icon_path')->store('gallery_icons', 'public');
        }


        Gallery::create($data);

        return redirect()->route('galleries.index')->with('success', 'Gallery added successfully.');
    }

    // Show the edit form
    public function edit($id)
    {
        $gallery = Gallery::findOrFail($id);
        $floors = Floor::all();
        $galleries = Gallery::where('id', '!=', $id)->get(); // Exclude current gallery to avoid circular reference

        return view('galleries.edit', compact('gallery', 'floors', 'galleries'));
    }

    // Update gallery
    public function update(Request $request, $id)
    {
        $gallery = Gallery::findOrFail($id);

        $request->validate([
            'floor_id' => 'required|exists:floors,id',
            'gallery_name' => 'required|string|max:255',
            'gallery_icon_path' => 'nullable|image|mimes:jpg,png,jpeg|max:2048',
            'language' => 'required',
            'short_description' => 'nullable|string',
            'next_gallery_id' => 'nullable|exists:galleries,id',
            'previous_gallery_id' => 'nullable|exists:galleries,id',
        ]);

        $data = $request->all();

        // Handle file upload
        if ($request->hasFile('gallery_icon_path')) {
            // Delete the old icon if it exists
            if ($gallery->gallery_icon_path) {
                Storage::disk('public')->delete($gallery->gallery_icon_path);
            }

            // Upload new icon
            $data['gallery_icon_path'] = $request->file('gallery_icon_path')->store('gallery_icons', 'public');
        }

        // Update gallery data
        $gallery->update($data);

        return redirect()->route('galleries.index')->with('success', 'Gallery updated successfully.');
    }

    // Delete gallery
    public function destroy($id)
    {
        $gallery = Gallery::findOrFail($id);
        
        if ($gallery->gallery_icon_path) {
            Storage::disk('public')->delete($gallery->gallery_icon_path);
        }
        
        
        $gallery->delete();

        return redirect()->route('galleries.index')->with('success', 'Gallery deleted successfully.');
    }
}
