<?php

namespace App\Http\Controllers;

use App\Models\DataAlumni;
use App\Models\Jabatan;
use App\Models\KualifikasiBidang;
use App\Models\TahunAngkatan;
use App\Imports\DataAlumniImport;
use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Illuminate\Http\Request;

class DataAlumniController extends Controller
{
    /**
     * Menampilkan data alumni.
     */
    public function index(Request $request)
    {
        $alumni = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])->get();
        $jabatans = Jabatan::all();
        $kualifikasis = KualifikasiBidang::all();
        $angkatans = TahunAngkatan::all();
        $jumlahPerluReview = DataAlumni::where('perlu_review', true)->count();

        // Cek apakah user memilih filter angkatan
        $selectedAngkatan = $request->angkatan;

        // Ambil data alumni, filter jika angkatan dipilih
        $query = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan']);

        if ($selectedAngkatan) {
            $query->where('angkatan', $selectedAngkatan);
        }

        $alumni = $query->get();

        $jabatanMap = $jabatans->pluck('Kategori_bidang_kerja', 'id_kategori')->toArray();

        return view('data_alumni', compact('alumni', 'jabatans', 'kualifikasis', 'angkatans', 'jabatanMap','jumlahPerluReview'));
    }

    /**
     * Menampilkan form tambah data (kalau pakai halaman terpisah).
     */
    public function create()
    {
        $jabatans = Jabatan::all();
        $kualifikasis = KualifikasiBidang::all();
        $angkatans = TahunAngkatan::all();

        return view('data_alumni', compact('jabatans', 'kualifikasis', 'angkatans'));
    }

    /**
     * Menyimpan data alumni baru.
     */
    public function store(Request $request)
    {
        $request->validate([
            'nama' => 'required|string|max:255',
            'nim' => 'required|string|max:10',
            'angkatan' => 'required|integer',
            'masa_tunggu' => 'nullable|integer',
            'pekerjaan' => 'nullable|string|max:255',
            'instansi' => 'nullable|string|max:255',
            'link_linkedin' => 'nullable|string|max:255',
            'Jenis_profesi' => 'required|string',
            'lingkup_pekerjaan' => 'required|string',
            'kualifikasi_bidang_kerja' => 'required|integer',
            'jabatan' => 'required|integer',
        ]);

        // Data baru dibuat oleh admin tidak perlu direview
        $data = $request->all();
        $data['perlu_review'] = false;

        DataAlumni::create($request->all());

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

    /**
     * Menampilkan detail (jika ada halaman detail).
     */
    public function show(DataAlumni $dataAlumni)
    {
        return view('data_alumni.show', compact('dataAlumni'));
    }

    /**
     * Menampilkan form edit (jika pakai halaman edit).
     */
    public function edit(DataAlumni $dataAlumni)
    {
        $jabatans = Jabatan::all();
        $kualifikasis = KualifikasiBidang::all();
        $angkatans = TahunAngkatan::all();

        return view('data_alumni.edit', compact('dataAlumni', 'jabatans', 'kualifikasis', 'angkatans'));
    }

    /**
     * Memperbarui data alumni.
     */
    public function update(Request $request, $id_alumni)
    {
        $request->validate([
            'nama' => 'required|string|max:255',
            'nim' => 'required|string|max:10',
            'angkatan' => 'required|integer',
            'masa_tunggu' => 'nullable|integer',
            'pekerjaan' => 'nullable|string|max:255',
            'instansi' => 'nullable|string|max:255',
            'link_linkedin' => 'nullable|string|max:255',
            'Jenis_profesi' => 'required|string',
            'lingkup_pekerjaan' => 'required|string',
            'kualifikasi_bidang_kerja' => 'required|integer',
            'jabatan' => 'required|integer',
        ]);

        $dataAlumni = DataAlumni::findOrFail($id_alumni);
        // Update dari admin selalu menandai data sebagai sudah direview
        $data = $request->all();
        $data['perlu_review'] = false;
        
        $dataAlumni->update($request->all());

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

    /**
     * Menghapus data alumni.
     */
    public function destroy($id_alumni)
    {
        $dataAlumni = DataAlumni::findOrFail($id_alumni);
        $dataAlumni->delete();

        // Redirect setelah berhasil
        return response()->json(['success' => true]);
    }

    /**
     * Import data dari file Excel.
     */
    public function import(Request $request)
    {
        $request->validate([
            'file' => 'required|mimes:xlsx,xls,csv'
        ]);

        Excel::import(new DataAlumniImport, $request->file('file'));

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

    // public function perluReview()
    // {
    //     $alumniPerluReview = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])
    //         ->where('perlu_review', true)
    //         ->get();

    //     return view('admin.alumni_perlu_review', compact('alumniPerluReview'));
    // }

    // public function resetReview($id)
    // {
    //     $alumni = DataAlumni::findOrFail($id);
    //     $alumni->perlu_review = false;
    //     $alumni->save();

    //     return back()->with('success', 'Data ditandai sebagai sudah direview');
    // }

      /**
     * Menampilkan daftar alumni yang perlu direview.
     */
    
    public function perluReview()
    {
        // Ambil semua data alumni yang perlu direview
        $alumniPerluReview = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])
            ->where('perlu_review', true)
            ->get();

        // Siapkan data yang diperlukan untuk form review
        $jabatans = Jabatan::all();
        $kualifikasis = KualifikasiBidang::all();

        return view('admin.alumni_perlu_review', compact('alumniPerluReview', 'jabatans', 'kualifikasis'));
    }

    /**
     * Menandai data alumni sebagai sudah direview.
     */
    public function resetReview($id)
    {
        $alumni = DataAlumni::findOrFail($id);
        $alumni->perlu_review = false;
        $alumni->save();

        return back()->with('success', 'Data ditandai sebagai sudah direview');
    }

    /**
     * Menangani review dan menyelesaikan proses review dengan mengubah data.
     */
    // public function handleReview(Request $request, $id)
    // {
    //     $request->validate([
    //         'kualifikasi_bidang_kerja' => 'required|integer',
    //         'jabatan' => 'required|integer',
    //     ]);

    //     $alumni = DataAlumni::findOrFail($id);
        
    //     // Update data kualifikasi dan jabatan berdasarkan review admin
    //     $alumni->kualifikasi_bidang_kerja = $request->kualifikasi_bidang_kerja;
    //     $alumni->jabatan = $request->jabatan;
    //     $alumni->perlu_review = false; // Tandai sebagai sudah direview
    //     $alumni->save();

    //     return redirect()->route('admin.alumni.perlu-review')
    //         ->with('success', 'Data alumni berhasil diupdate berdasarkan review');
    // }

        public function downloadTemplate()
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        // Header
        $sheet->setCellValue('A1', 'nama');
        $sheet->setCellValue('B1', 'nim');
        $sheet->setCellValue('C1', 'angkatan');
        $sheet->setCellValue('D1', 'masa_tunggu');
        $sheet->setCellValue('E1', 'pekerjaan');
        $sheet->setCellValue('F1', 'instansi');
        $sheet->setCellValue('G1', 'link_linkedin');
        $sheet->setCellValue('H1', 'jenis_profesi');
        $sheet->setCellValue('I1', 'lingkup_pekerjaan');
        $sheet->setCellValue('J1', 'kualifikasi_bidang_kerja');
        $sheet->setCellValue('K1', 'kelompok_jabatan');

        // Contoh data (optional)
        $sheet->setCellValue('A2', 'Contoh Nama');
        $sheet->setCellValue('B2', 'E12345678');
        $sheet->setCellValue('C2', '2020');
        $sheet->setCellValue('D2', '3');
        $sheet->setCellValue('E2', 'Programmer');
        $sheet->setCellValue('F2', 'PT ABC');
        $sheet->setCellValue('G2', 'https://linkedin.com/in/contoh');
        $sheet->setCellValue('H2', 'Programmer');
        $sheet->setCellValue('I2', 'Nasional');
        $sheet->setCellValue('J2', 'Sangat erat');
        $sheet->setCellValue('K2', 'Lulusan D3');

        $writer = new Xlsx($spreadsheet);
        $filename = 'template_data_alumni.xlsx';

        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header("Content-Disposition: attachment; filename=\"$filename\"");
        $writer->save('php://output');
        exit;
    }

}
