<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Services\BookingService;
use Exception;
use Illuminate\Support\Facades\Auth;

class BookingController extends Controller
{
    protected $bookingService;

    public function __construct(BookingService $bookingService)
    {
        $this->bookingService = $bookingService;
    }

    /**
     * Tampilkan halaman pilih instansi dan form booking
     */
    public function index()
    {
        // Akan merender view frontend untuk peserta memilih Dinas/OPD dan melihat kuota.
        return view('booking.index'); // Placeholder untuk frontend
    }

    /**
     * API untuk mencari user berdasarkan nama atau email (untuk peserta tambahan)
     */
    public function searchUsers(Request $request)
    {
        $keyword = $request->get('q');
        
        if (strlen($keyword) < 3) {
            return response()->json([]);
        }

        // Cari user yang bukan admin atau superadmin, dan yang sedang tidak punya booking aktif (opsional di level pencarian)
        $users = User::where(function($query) use ($keyword) {
                $query->where('nama', 'LIKE', "%{$keyword}%")
                      ->orWhere('email', 'LIKE', "%{$keyword}%");
            })
            // ->role('participant') // Jika menggunakan spatie roles dan ingin difilter
            ->where('id', '!=', Auth::id()) // Jangan tampilkan diri sendiri
            ->limit(10)
            ->get(['id', 'nama', 'email']);

        return response()->json($users);
    }

    /**
     * Memproses form booking yang dikirim oleh peserta
     */
    public function store(Request $request)
    {
        $request->validate([
            'instansi_id' => 'required|exists:md_instansi,id',
            'participant_ids' => 'nullable|array|max:' . config('magang.maksimal_anggota_tambahan', 2),
            'participant_ids.*' => 'exists:md_user,id',
        ]);

        try {
            $leaderId = Auth::id();
            $instansiId = $request->input('instansi_id');
            $participantIds = $request->input('participant_ids', []);

            $booking = $this->bookingService->createBooking($leaderId, $instansiId, $participantIds);

            return redirect()->route('booking.success', $booking->id)
                ->with('success', 'Berhasil melakukan booking slot. Segera selesaikan pengajuan administrasi maksimal 1 jam.');
                
        } catch (Exception $e) {
            return redirect()->back()->withErrors(['error' => $e->getMessage()]);
        }
    }
}
