<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Sekolah;
use App\Models\Kelas;
use App\Models\Siswa;
use App\Models\User;
use App\Models\TahunAjaran;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Log;


class SekolahController extends Controller
{
    public function sekolah()
    {
        $sekolahs = Sekolah::all();
        return view('admin.sekolah', compact('sekolahs'));
    }

    public function tambahsekolah(Request $request)
    {
    $request->validate([
        'nama' => 'required',
        'alamat' => 'required',
    ]);

    // Ambil nilai dari request
    $nama = $request->input('nama');
    $alamat = $request->input('alamat');

    // Cek apakah ada kombinasi nama dan alamat yang sudah ada
    $duplikatNamaAlamat = Sekolah::where('nama', $nama)
                                 ->where('alamat', $alamat)
                                 ->exists();

    // Cek apakah ada nama yang duplikat
    $duplikatNama = Sekolah::where('nama', $nama)->exists();

    // Cek apakah ada alamat yang duplikat
    $duplikatAlamat = Sekolah::where('alamat', $alamat)->exists();

    if ($duplikatNamaAlamat) {
        toastr()->error('Sekolah dengan nama dan alamat tersebut sudah ada.');
        return redirect()->back();
    }

    if ($duplikatNama) {
        toastr()->error('Sekolah dengan nama tersebut sudah ada.');
        return redirect()->back();
    }

    if ($duplikatAlamat) {
        toastr()->error('Sekolah dengan alamat tersebut sudah ada.');
        return redirect()->back();
    }


    $sekolah = new Sekolah();
    $sekolah->nama = $request->input('nama');
    $sekolah->alamat = $request->input('alamat');

    if ($sekolah->save()) {
        toastr()->success('Data sekolah berhasil ditambahkan.');
    } else {
        toastr()->error('Gagal menambahkan data sekolah.');
    }

    return redirect()->route('sekolah');
    }

    public function updatesekolah(Request $request, $id)
    {
    $request->validate([
        'nama' => 'required',    
        'alamat' => 'required',
    ]);

    // Ambil data sekolah berdasarkan ID
    $sekolah = Sekolah::findOrFail($id);

    // Ambil nilai dari request
    $nama = $request->input('nama');
    $alamat = $request->input('alamat');


    // Cek apakah ada nama yang duplikat (karena nama unique di database)
    $duplikatNama = Sekolah::where('nama', $nama)
                           ->where('id', '!=', $id)
                           ->exists();

    if ($duplikatNama) {
        toastr()->error('Sekolah dengan nama tersebut sudah ada.');
        return redirect()->back();
    }

    // Cek apakah ada alamat yang duplikat
    $duplikatAlamat = Sekolah::where('alamat', $alamat)
                             ->where('id', '!=', $id)
                             ->exists();

    if ($duplikatAlamat) {
        toastr()->error('Sekolah dengan alamat tersebut sudah ada.');
        return redirect()->back();
    }

    // Update data sekolah
    $sekolah->nama = $nama;
    $sekolah->alamat = $alamat;
    $sekolah->save();

    toastr()->success('Data sekolah berhasil diupdate.');
    return redirect()->route('sekolah')->with('reload', true);
    }   

    public function hapussekolah($id)
    {
        $sekolah = Sekolah::findOrFail($id);
        $sekolah->delete();

        toastr()->success('Data sekolah berhasil dihapus.');
        return redirect()->route('sekolah');
    }

    public function downloadsekolah()
    {
        // Ambil data sekolah dari database
        $sekolahs = Sekolah::all();
        $pdf = Pdf::loadView('admin.sekolahpdf', compact('sekolahs'));
        // Download file PDF
        return $pdf->download('data_sekolah.pdf');
    }

    public function kelas()
    {
        $kelas = Kelas::all();
        $sekolahs = Sekolah::all();
        return view('admin.kelas', compact('kelas', 'sekolahs'));
    }
    
    public function getkelas($id)
    {
    $kelas = Kelas::where('sekolah_id', $id)->get();
    // Balikkan dalam bentuk JSON
    return response()->json(['kelas' => $kelas]);
    }

    
    public function tambahkelas(Request $request)
    {
        $request->validate([
            'nama_kelas' => 'required',
            'sekolah_id' => 'required|exists:sekolahs,id',
        ]);

        // Ambil nilai dari request
        $nama = $request->input('nama_kelas');

        // Cek apakah ada nama yang duplikat
        $duplikatNama = Kelas::where('nama_kelas', $nama)
                     ->where('sekolah_id', $request->input('sekolah_id'))
                     ->exists();

        if ($duplikatNama) {
        toastr()->error('Kelas dengan nama tersebut sudah ada.');
        return redirect()->back();
        }

        $kelas = new Kelas();
        $kelas->nama_kelas = $request->input('nama_kelas');
        $kelas->sekolah_id = $request->input('sekolah_id');

        if ($kelas->save()) {
            toastr()->success('Data kelas berhasil ditambahkan.');
        } else {
            toastr()->error('Gagal menambahkan data kelas.');
        }

        return redirect()->route('kelas');
    }

    public function updatekelas(Request $request, $id)
    {
        $request->validate([
            'nama_kelas' => 'required',
            'sekolah_id' => 'required|exists:sekolahs,id',
        ]);

        // Ambil data kelas berdasarkan ID
        $kelas = Kelas::findOrFail($id);

        // Ambil nilai dari request
        $nama = $request->input('nama_kelas');

        // Cek apakah ada nama yang duplikat, kecuali untuk kelas yang sedang diupdate
        $duplikatNama = Kelas::where('nama_kelas', $nama)
                     ->where('sekolah_id', $request->input('sekolah_id'))
                     ->where('id', '!=', $id) // Menghindari duplikasi pada kelas yang sedang diupdate
                     ->exists();

        if ($duplikatNama) {
            toastr()->error('Kelas dengan nama tersebut sudah ada.');
            return redirect()->back();
        }

        // Update data kelas
        $kelas->nama_kelas = $nama;
        $kelas->sekolah_id = $request->input('sekolah_id');

        if ($kelas->save()) {
            toastr()->success('Data kelas berhasil diupdate.');
        } else {
            toastr()->error('Gagal memperbarui data kelas.');
        }

        return redirect()->route('kelas')->with('reload', true);
        }

    public function hapuskelas($id)
    {
        $kelas = Kelas::findOrFail($id);
        $kelas->delete();

        toastr()->success('Data kelas berhasil dihapus.');
        return redirect()->route('kelas');
    }

    public function downloadkelas()
    {
        // Ambil data sekolah dari database
        $kelas = Kelas::all();
        $pdf = Pdf::loadView('admin.kelaspdf', compact('kelas'));
        // Download file PDF
        return $pdf->download('data_kelas.pdf');
    }

    public function siswa()
{
    $users = User::where('usertype', 'user')->get();
    $sekolahs = Sekolah::all(); // Untuk dropdown sekolah
    $kelas = Kelas::all(); // Untuk dropdown kelas
    $tahun_ajarans = TahunAjaran::where('is_active', 1)->get(); // Ambil tahun ajaran yang aktif
    $siswas = Siswa::with('user', 'sekolah', 'kelas', 'tahunAjaran')->get(); // Tambahkan relasi 'tahunAjaran'

    return view('admin.siswa', compact('siswas', 'users', 'sekolahs', 'kelas', 'tahun_ajarans'));
}

public function tambahsiswa(Request $request)
{
    $request->validate([
        'user_id' => 'required|exists:users,id',
        'sekolah_id' => 'required|exists:sekolahs,id',
        'kelas_id' => 'required|exists:kelas,id',
        'tahun_ajaran_id' => 'required|exists:tahun_ajarans,id',
    ]);

    $userId = $request->input('user_id');
    $sekolahId = $request->input('sekolah_id');
    $kelasId = $request->input('kelas_id');
    $tahunAjaranId = $request->input('tahun_ajaran_id');

    // Cek apakah siswa ini sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama
    $duplikat = Siswa::where('user_id', $userId)
                ->where('sekolah_id', $sekolahId)
                ->where('kelas_id', $kelasId)
                ->where('tahun_ajaran_id', $tahunAjaranId)
                ->exists();

    if ($duplikat) {
        toastr()->error('Siswa tersebut sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama.');
        return redirect()->back();
    }

    // Simpan data siswa
    $siswa = new Siswa();
    $siswa->user_id = $userId;
    $siswa->sekolah_id = $sekolahId;
    $siswa->kelas_id = $kelasId;
    $siswa->tahun_ajaran_id = $tahunAjaranId;

    if ($siswa->save()) {
        toastr()->success('Data siswa berhasil ditambahkan.');
    } else {
        toastr()->error('Gagal menambahkan data siswa.');
    }

    return redirect()->route('siswa')->with('reload', true);
}

public function updatesiswa(Request $request, $id)
{
    // Validasi input
    $request->validate([
        'user_id' => 'required|exists:users,id',
        'sekolah_id' => 'required|exists:sekolahs,id',
        'kelas_id' => 'required|exists:kelas,id',
        'tahun_ajaran_id' => 'required|exists:tahun_ajarans,id',
    ]);

    // Cari data siswa berdasarkan ID
    $siswa = Siswa::findOrFail($id);

    $userId = $request->input('user_id');
    $sekolahId = $request->input('sekolah_id');
    $kelasId = $request->input('kelas_id');
    $tahunAjaranId = $request->input('tahun_ajaran_id');

    // Cek apakah siswa ini sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama, kecuali untuk siswa yang sedang di-update
    $duplikat = Siswa::where('user_id', $userId)
                ->where('sekolah_id', $sekolahId)
                ->where('kelas_id', $kelasId)
                ->where('tahun_ajaran_id', $tahunAjaranId)
                ->where('id', '!=', $id) // Hindari memeriksa siswa yang sedang di-update
                ->exists();

    if ($duplikat) {
        toastr()->error('Siswa tersebut sudah terdaftar di sekolah, kelas, dan tahun ajaran yang sama.');
        return redirect()->back();
    }

    // Update data siswa
    $siswa->user_id = $userId;
    $siswa->sekolah_id = $sekolahId;
    $siswa->kelas_id = $kelasId;
    $siswa->tahun_ajaran_id = $tahunAjaranId;

    if ($siswa->save()) {
        toastr()->success('Data siswa berhasil di-update.');
    } else {
        toastr()->error('Gagal meng-update data siswa.');
    }

    return redirect()->route('siswa');
}

public function hapussiswa($id)
{
    $siswa = Siswa::findOrFail($id);
    $siswa->delete();

    toastr()->success('Data siswa berhasil dihapus.');
    return redirect()->route('siswa');
}

public function downloadsiswa()
{
    // Ambil data siswa dengan relasi lengkap untuk PDF
    $siswas = Siswa::with('user', 'sekolah', 'kelas', 'tahunAjaran')->get();
    $pdf = Pdf::loadView('admin.siswapdf', compact('siswas'));
    // Download file PDF
    return $pdf->download('data_siswa.pdf');
}
}