<?php

// namespace App\Http\Controllers;
// use App\Models\TahunAngkatan;
// use App\Models\DataAlumni;
// use App\Models\HasilKlasifikasi;
// use Illuminate\Support\Facades\DB;
// use Illuminate\Http\Request;

// class DashboardController extends Controller
// {
//     public function index()
//     {
//         $angkatanList = TahunAngkatan::all();
//         $totalAlumni = DataAlumni::count();
//         $angkatanStats = TahunAngkatan::withCount('alumni')->get();

//         $clusterStats = HasilKlasifikasi::select('cluster', DB::raw('count(*) as total'))
//                         ->groupBy('cluster')
//                         ->get();

//         // Ambil data centroid per iterasi (jika disimpan)
//         $centroidData = HasilKlasifikasi::select('iterasi', 'centroid_awal', 'centroid_akhir')
//                         ->orderBy('iterasi')
//                         ->get();

        
//         return view('dashboard', compact('angkatanList','totalAlumni', 'angkatanStats', 'clusterStats', 'centroidData'));
//     }

//     public function filter(Request $request)
//     {
//         $angkatan = $request->angkatan;
//         $angkatanList = TahunAngkatan::all();

//         $dataAlumni = DataAlumni::with(['jabatan', 'kualifikasi_bidang', 'angkatan'])
//             ->where('angkatan', $angkatan)
//             ->get();

//         $hasil = HasilKlasifikasi::with('alumni')
//             ->whereHas('alumni', fn($q) => $q->where('angkatan', $angkatan))
//             ->get();

//         // Data untuk Chart Tren
//         $trens = TahunAngkatan::with(['alumni.hasilKlasifikasi'])
//             ->get()
//             ->map(function ($item) {
//                 return [
//                     'tahun' => $item->tahun,
//                     'cluster_0' => $item->alumni->where('hasilKlasifikasi.cluster', 0)->count(),
//                     'cluster_1' => $item->alumni->where('hasilKlasifikasi.cluster', 1)->count(),
//                     'cluster_2' => $item->alumni->where('hasilKlasifikasi.cluster', 2)->count(),
//                 ];
//             });

//         return view('dashboard', compact('dataAlumni', 'hasil', 'angkatan', 'angkatanList', 'trens'));
//     }
// }

//edit sendiri
// namespace App\Http\Controllers;

// use Illuminate\Http\Request;
// use Illuminate\Support\Facades\DB;

// class DashboardController extends Controller
// {
//     public function index(Request $request)
//     {
//         // --- FILTER ANGKATAN ---
//         $angkatanFilter = $request->input('angkatan');
//         $angkatanList = DB::table('tahun_angkatan')->pluck('tahun', 'id_angkatan');

//         // --- MAP CLUSTER ---
//         $clusterMap = [0 => 'TIDAK SESUAI', 1 => 'KURANG SESUAI', 2 => 'SANGAT SESUAI'];

//         // --- PIE CHART: Distribusi Cluster ---
//         $clusterQuery = DB::table('hasil_klasifikasi')
//             ->join('data_alumni', 'hasil_klasifikasi.id_alumni', '=', 'data_alumni.id_alumni')
//             ->when($angkatanFilter, fn($q) => $q->where('data_alumni.angkatan', $angkatanFilter))
//             ->select('hasil_klasifikasi.cluster', DB::raw('COUNT(*) as total'))
//             ->groupBy('hasil_klasifikasi.cluster')
//             ->get();

//         $clusterLabels = array_values($clusterMap);
//         $clusterValues = [];
//         foreach (array_keys($clusterMap) as $key) {
//             $found = $clusterQuery->firstWhere('cluster', $key);
//             $clusterValues[] = $found ? $found->total : 0;
//         }

//         // --- LINE CHART: Profesi per Angkatan ---
//         $professionTrends = DB::table('data_alumni')
//             ->join('tahun_angkatan', 'data_alumni.angkatan', '=', 'tahun_angkatan.id_angkatan')
//             ->select('tahun_angkatan.tahun', 'data_alumni.jenis_profesi', DB::raw('COUNT(*) as total'))
//             ->groupBy('tahun_angkatan.tahun', 'data_alumni.jenis_profesi')
//             ->orderBy('tahun_angkatan.tahun')
//             ->get();

//         $years = $professionTrends->pluck('tahun')->unique()->values()->toArray();
//         $professions = [
//             'Programmer', 'Data Analyst', 'Business Intelligence Developer',
//             'Wirausaha', 'Non IT', 'Tidak diketahui', 'Tidak bekerja',
//             'Pelajar', 'Wirausaha IT', 'Infokom'
//         ];

//         $chartData = [];
//         foreach ($professions as $profession) {
//             $data = [];
//             foreach ($years as $year) {
//                 $match = $professionTrends->firstWhere(fn($row) =>
//                     $row->tahun == $year && $row->jenis_profesi == $profession
//                 );
//                 $data[] = $match ? $match->total : 0;
//             }
//             $chartData[] = ['name' => $profession, 'data' => $data];
//         }

//         // --- PROFESI TERBANYAK ---
//         $topJob = DB::table('data_alumni')
//             ->when($angkatanFilter, fn($q) => $q->where('angkatan', $angkatanFilter))
//             ->select('jenis_profesi', DB::raw('COUNT(*) as total'))
//             ->whereNotNull('jenis_profesi')
//             ->groupBy('jenis_profesi')
//             ->orderByDesc('total')
//             ->first();

//         // --- TOTAL DATA ---
//         $totalAlumniCount = DB::table('data_alumni')
//             ->when($angkatanFilter, fn($q) => $q->where('angkatan', $angkatanFilter))
//             ->count();

//         $totalAngkatanCount = DB::table('tahun_angkatan')->count();

//         // --- CLUSTER CENTERS (Dummy untuk Scatter Plot) ---
//         $clusterCenters = [
//             0 => ['x' => 1, 'y' => 0],
//             1 => ['x' => 3, 'y' => 3],
//             2 => ['x' => 6, 'y' => 6],
//         ];

//         // --- SCATTER PLOT DATA ---
//         $scatterData = [];
//         try {
//             $alumni = DB::table('hasil_klasifikasi')
//                 ->join('data_alumni', 'hasil_klasifikasi.id_alumni', '=', 'data_alumni.id_alumni')
//                 ->join('kualifikasi_bidang', 'data_alumni.kualifikasi_bidang_kerja', '=', 'kualifikasi_bidang.id_kualifikasi')
//                 ->select(
//                     'hasil_klasifikasi.cluster',
//                     'data_alumni.nama',
//                     'data_alumni.jenis_profesi',
//                     'kualifikasi_bidang.nilai_kompetensi as x_value',
//                     'kualifikasi_bidang.nilai_kesesuaian as y_value'
//                 )
//                 ->when($angkatanFilter, fn($q) => $q->where('data_alumni.angkatan', $angkatanFilter))
//                 ->get();

//             foreach ($alumni as $a) {
//                 $cluster = $a->cluster;
//                 $center = $clusterCenters[$cluster] ?? ['x' => 0, 'y' => 0];

//                 $x = $a->x_value ?? max(0, min(100, $center['x'] + mt_rand(-15, 15)));
//                 $y = $a->y_value ?? max(0, min(100, $center['y'] + mt_rand(-15, 15)));

//                 $scatterData[$cluster][] = [
//                     'x' => $x,
//                     'y' => $y,
//                     'name' => $a->nama . ' (' . ($a->jenis_profesi ?? 'Unknown') . ')'
//                 ];
//             }
//         } catch (\Exception $e) {
//             // Fallback dummy data jika gagal mengambil data asli
//             foreach ($clusterMap as $cluster => $label) {
//                 $center = $clusterCenters[$cluster] ?? ['x' => 0, 'y' => 0];
//                 for ($i = 0; $i < mt_rand(25, 50); $i++) {
//                     $scatterData[$cluster][] = [
//                         'x' => max(0, min(100, $center['x'] + mt_rand(-15, 15))),
//                         'y' => max(0, min(100, $center['y'] + mt_rand(-15, 15))),
//                         'name' => 'Alumni ' . ($i + 1)
//                     ];
//                 }
//             }
//         }

//         return view('dashboard', [
//             'chartYears' => $years,
//             'chartData' => $chartData,
//             'angkatanList' => $angkatanList,
//             'angkatanFilter' => $angkatanFilter,
//             'clusterLabels' => $clusterLabels,
//             'clusterValues' => $clusterValues,
//             'topJobName' => $topJob->jenis_profesi ?? 'Belum Ada Data',
//             'topJobCount' => $topJob->total ?? 0,
//             'totalAlumniCount' => $totalAlumniCount,
//             'totalAngkatanCount' => $totalAngkatanCount,
//             'scatterData' => $scatterData
//         ]);
//     }

    
// }


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class DashboardController extends Controller
{
   public function index(Request $request)
    {
        // --- FILTER ANGKATAN UNTUK PIE CHART ---
        $angkatanFilter = $request->input('angkatan');
        $angkatanList = DB::table('tahun_angkatan')->pluck('tahun', 'id_angkatan');

        // Data untuk Pie Chart Cluster
        $query = DB::table('hasil_klasifikasi')
            ->join('data_alumni', 'hasil_klasifikasi.id_alumni', '=', 'data_alumni.id_alumni')
            ->join('tahun_angkatan', 'data_alumni.angkatan', '=', 'tahun_angkatan.id_angkatan')
            ->select('hasil_klasifikasi.cluster', DB::raw('COUNT(*) as total'))
            ->groupBy('hasil_klasifikasi.cluster');

        if ($angkatanFilter) {
            $query->where('data_alumni.angkatan', $angkatanFilter);
        }

        $clusterData = $query->get();
        $clusterMap = [0 => 'TIDAK SESUAI', 1 => 'KURANG SESUAI', 2 => 'SANGAT SESUAI'];
        $clusterLabels = [];
        $clusterValues = [];

        foreach ($clusterMap as $key => $label) {
            $clusterLabels[] = $label;
            $found = $clusterData->firstWhere('cluster', $key);
            $clusterValues[] = $found ? $found->total : 0;
        }

        // --- LINE CHART: PROFESI PER ANGKATAN ---
        $professionTrends = DB::table('data_alumni')
            ->join('tahun_angkatan', 'data_alumni.angkatan', '=', 'tahun_angkatan.id_angkatan')
            ->select('tahun_angkatan.tahun', 'data_alumni.jenis_profesi', DB::raw('COUNT(*) as total'))
            ->groupBy('tahun_angkatan.tahun', 'data_alumni.jenis_profesi')
            ->orderBy('tahun_angkatan.tahun')
            ->get();

        $years = $professionTrends->pluck('tahun')->unique()->values()->toArray();
        $professions = [
            'Programmer',
            'Data Analyst',
            'Business Intelligence Developer',
            'Wirausaha',
            'Non IT',
            'Tidak diketahui',
            'Tidak bekerja',
            'Pelajar',
            'Wirausaha IT',
            'Infokom'
        ];

        $chartData = [];

        foreach ($professions as $profession) {
            $professionData = ['name' => $profession, 'data' => []];

            foreach ($years as $year) {
                $count = $professionTrends->firstWhere(fn($item) => $item->tahun == $year && $item->jenis_profesi == $profession);
                $professionData['data'][] = $count ? $count->total : 0;
            }

            $chartData[] = $professionData;
        }

        // --- CARD: PROFESI PALING BANYAK DITEKUNI ---
       // --- CARD: PROFESI PALING BANYAK DITEKUNI ---
    $topJobQuery = DB::table('data_alumni')
    ->join('tahun_angkatan', 'data_alumni.angkatan', '=', 'tahun_angkatan.id_angkatan')
    ->select('data_alumni.jenis_profesi', DB::raw('COUNT(*) as total'))
    ->when($angkatanFilter, function ($query) use ($angkatanFilter) {
        return $query->where('data_alumni.angkatan', $angkatanFilter);
    })
    ->whereNotNull('data_alumni.jenis_profesi')
    ->groupBy('data_alumni.jenis_profesi')
    ->orderByDesc('total')
    ->first();

    $angkatanFilter = $request->query('angkatan');

    $totalAlumni = DB::table('data_alumni');
    if ($angkatanFilter) {
    $totalAlumni->where('angkatan', $angkatanFilter);
    }
    $totalAlumniCount = $totalAlumni->count();



$totalAngkatanCount = DB::table('tahun_angkatan')->count();

        return view('dashboard', [
            'chartYears' => $years,
            'chartData' => $chartData,
            'angkatanList' => $angkatanList,
            'angkatanFilter' => $angkatanFilter,
            'clusterLabels' => $clusterLabels,
            'clusterValues' => $clusterValues,
            'topJobName' => $topJobQuery->jenis_profesi ?? 'Belum Ada Data',
            'topJobCount' => $topJobQuery->total ?? 0,
            'totalAlumniCount' => $totalAlumniCount,
            'totalAngkatanCount' => $totalAngkatanCount,
        ]);
    }

}