<?php

namespace App\Http\Controllers;

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

class GuruController extends Controller
{
    /**
     * Menampilkan daftar semua guru.
     */
    public function index()
    {
        $gurus = Guru::orderBy('nama')->get();

        return view('guru.index', compact('gurus'));
    }

    /**
     * Menampilkan detail satu guru.
     */
    public function show($id)
    {
        $guru = Guru::findOrFail($id);

        return view('guru.show', compact('gurus'));
    }

    
    /**
     * CREATE: Menampilkan halaman form tambah guru.
     */
    public function create()
    {
        return view('guru.create');
    }

    /**
     * CREATE: Menyimpan data guru baru ke database.
     */
    public function store(Request $request)
    {
        // 1. Validasi input disesuaikan dengan struktur kolom tabel migration kamu
        $request->validate([
            'nip'           => ['required', 'string', 'unique:gurus,nip'],
            'nama'          => ['required', 'string', 'max:255'],
            'mata_pelajaran' => ['required', 'string', 'max:50'],
            'jenis_kelamin' => ['required', 'in:Laki-laki,Perempuan'],
            'alamat'        => ['required', 'string'],
        ], [
            'nip.unique' => 'NIP sudah terdaftar, silakan gunakan NIP Lain.',
            'nip.required' => 'NIP wajib diisi.',
        ]);

        // 2. Simpan ke database
        Guru::create($request->all());

        // 3. Redirect ke halaman utama guru dengan pesan sukses
        return redirect()->route('guru.index')
            ->with('success', 'Data guru berhasil ditambahkan!');
    }

    /**
     * READ DETAIL: Menampilkan detail satu guru berdasarkan ID.
     */
    public function show($id)
    {
        $guru = Guru::findOrFail($id);
        return view('guru.show', compact('guru'));
    }

    /**
     * UPDATE: Menampilkan halaman form edit guru.
     */
    public function edit($id)
    {
        $guru = Guru::findOrFail($id);
        return view('guru.edit', compact('guru'));
    }

    /**
     * UPDATE: Menyimpan perubahan data guru ke database.
     */
    public function update(Request $request, $id)
    {
        $guru = Guru::findOrFail($id);

        // 1. Validasi input update (abaikan keunikan NIP untuk ID guru ini sendiri)
        $request->validate([
            'nip'           => ['required', 'string', 'unique:gurus,nip,' . $id],
            'nama'          => ['required', 'string', 'max:255'],
            'mata_pelajaran' => ['required', 'string', 'max:50'],
            'jenis_kelamin' => ['required', 'in:Laki-laki,Perempuan'],
            'alamat'        => ['required', 'string'],
        ]);

        // 2. Update data di database
        $guru->update($request->all());

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

    /**
     * DELETE: Menghapus data guru dari database.
     */
    public function destroy($id)
    {
        $guru = Guru::findOrFail($id);
        $guru->delete();

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