<?php

namespace App\Http\Controllers;

use App\Models\Lokasi;
use Illuminate\Http\Request;

class LokasiController extends Controller
{
    public function index(\Illuminate\Http\Request $request)
    {
        $perPage = (int) $request->query('perpage', 12);

        $query = Lokasi::query();

        if ($search = $request->query('search')) {
            $query->where(function($q) use ($search) {
                $q->where('nama_lokasi', 'like', "%{$search}%")
                  ->orWhere('alamat', 'like', "%{$search}%");
            });
        }

        $lokasis = $query->latest()->paginate($perPage)->appends($request->except('page'));

        return view('lokasi.index', compact('lokasis'));
    }

    public function create()
    {
        return view('lokasi.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'nama_lokasi' => 'required',
            'alamat'      => 'required',
            'kapasitas'   => 'required|numeric'
        ]);

        Lokasi::create([
            'nama_lokasi' => $request->nama_lokasi,
            'alamat'      => $request->alamat,
            'kapasitas'   => $request->kapasitas
        ]);

        return redirect()
            ->route('lokasi.index')
            ->with(
                'success',
                'Data lokasi berhasil ditambahkan'
            );
    }

    public function show($id)
    {
        $lokasi = Lokasi::findOrFail($id);

        return view(
            'lokasi.show',
            compact('lokasi')
        );
    }

    public function edit($id)
    {
        $lokasi = Lokasi::findOrFail($id);

        return view(
            'lokasi.edit',
            compact('lokasi')
        );
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'nama_lokasi' => 'required',
            'alamat'      => 'required',
            'kapasitas'   => 'required|numeric'
        ]);

        $lokasi = Lokasi::findOrFail($id);

        $lokasi->update([
            'nama_lokasi' => $request->nama_lokasi,
            'alamat'      => $request->alamat,
            'kapasitas'   => $request->kapasitas
        ]);

        return redirect()
            ->route('lokasi.index')
            ->with(
                'success',
                'Data lokasi berhasil diperbarui'
            );
    }

    public function destroy($id)
    {
        $lokasi = Lokasi::findOrFail($id);

        $lokasi->delete();

        return redirect()
            ->route('lokasi.index')
            ->with(
                'success',
                'Data lokasi berhasil dihapus'
            );
    }
}