<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class UserController extends Controller
{
    public function index()
    {
        $semuaSiswa = User::whereIn('role', ['siswa', 'guru', 'penjaga perpus'])->latest()->get();
        return view('admin.pengguna.index', [
            'pageTitle' => 'Manajemen Pengguna',
            'semuaSiswa' => $semuaSiswa
        ]);
    }

    /**
     * Menampilkan form untuk membuat pengguna baru.
     */
    public function create()
    {
        return view('admin.pengguna.create', [
            'pageTitle' => 'Tambah Pengguna Baru',
        ]);
    }

    /**
     * Menampilkan form untuk mengedit pengguna yang ada.
     */
    public function edit($id)
    {
        $pengguna = User::findOrFail($id);

        return view('admin.pengguna.edit', [
            'pageTitle' => 'Edit Pengguna: ' . $pengguna->nama_lengkap,
            'pengguna' => $pengguna,
        ]);
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'nama_lengkap' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email',
            'nomor_induk' => 'nullable|string|max:50',
            'phone' => 'nullable|string|max:20',
            'role' => 'required|in:siswa,guru,penjaga perpus',
            'kelas' => 'nullable|string|max:50',
            'password' => 'required|string|min:8|confirmed',
        ]);

        $validated['password'] = Hash::make($validated['password']);
        $validated['name'] = $validated['nama_lengkap']; // Set name field for compatibility

        User::create($validated);

        return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil ditambahkan.');
    }

    public function update(Request $request, $id)
    {
        $pengguna = User::findOrFail($id);

        $validated = $request->validate([
            'nama_lengkap' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email,' . $id,
            'nomor_induk' => 'nullable|string|max:50',
            'phone' => 'nullable|string|max:20',
            'role' => 'required|in:siswa,guru,penjaga perpus',
            'kelas' => 'nullable|string|max:50',
            'password' => 'nullable|string|min:8|confirmed',
        ]);

        if ($request->filled('password')) {
            $validated['password'] = Hash::make($validated['password']);
        } else {
            unset($validated['password']);
        }

        $validated['name'] = $validated['nama_lengkap']; // Set name field for compatibility

        $pengguna->update($validated);

        return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil diperbarui.');
    }

    public function destroy($id)
    {
        $pengguna = User::findOrFail($id);
        $pengguna->delete();

        return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil dihapus.');
    }
}