<?php

namespace App\Http\Controllers;

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

class DashboardController extends Controller
{
    // Fungsi default, menampilkan data untuk tahun 2023
   public function index(Request $request)
{
    // Ambil tahun-tahun yang tersedia dari data_latih
    $tahunTersedia = DB::table('data_latih')
        ->select('data_tahun')
        ->distinct()
        ->orderByDesc('data_tahun')
        ->pluck('data_tahun');
    
    // Ambil tahun dari request (GET), kalau tidak ada pakai yang paling atas (terbaru)
    $selectedYear = $request->input('tahun', $tahunTersedia->first());
    
    // Hitung total kasus berdasarkan tahun yang dipilih
    $jumlahKasusDataLatih = DB::table('data_latih')
        ->where('data_tahun', $selectedYear)
        ->sum('kasus_2023');

    $data_latih = DB::table('data_latih')->get();
    $stats = DB::table('data_latih')
        ->selectRaw('
            ROUND(AVG(phbs), 2) AS persen_phbs_baik,
            ROUND(100 - AVG(phbs), 2) AS persen_phbs_tidak_baik,
            ROUND(AVG(imunisasi), 2) AS persen_imunisasi,
            ROUND(100 - AVG(imunisasi), 2) AS persen_tidak_imunisasi,
            ROUND(AVG(merokok), 2) AS persen_merokok,
            ROUND(100 - AVG(merokok), 2) AS persen_tidak_merokok
        ')
        ->first();

    // Ambil semua kolom dari tabel data_latih
    $columns = DB::getSchemaBuilder()->getColumnListing('data_latih');
    
    $selectedYear = $request->input('tahun') ?? $tahunTersedia->first();

    $kabupatens = DB::table('kabupatens')
        ->join('data_latih', 'kabupatens.nama', '=', 'data_latih.kecamatan')
        ->select('kabupatens.nama', 'kabupatens.latitude', 'kabupatens.longitude', 'data_latih.hipotesis')
        ->get();

    $topKasus = DB::table('data_latih')
        ->join('kabupatens', 'data_latih.kecamatan', '=', 'kabupatens.nama')
        ->select('kabupatens.nama', 'data_latih.kasus_2023')
        ->orderByDesc('data_latih.kasus_2023')
        ->take(5)
        ->get();

    // Ambil tahun-tahun yang tersedia dari tabel 'kasus'
    $availableYears = DB::table('kasus')
        ->select('tahun')
        ->distinct()
        ->orderByDesc('tahun')
        ->pluck('tahun');

    if (!$selectedYear) {
        $selectedYear = DB::table('data_latih')
            ->orderByDesc('data_tahun')
            ->value('data_tahun'); // Ambil 1 nilai tahun terbaru
    }


    // Data kasus per bulan untuk tahun yang dipilih
    $kasusPerBulan = DB::table('kasus')
        ->select('bulan', DB::raw('SUM(jumlah_kasus) as total'))
        ->where('tahun', $selectedYear)
        ->groupBy('bulan')
        ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')")
        ->get();

    $bulanLabels = [];
    $totalKasus = [];

    foreach ($kasusPerBulan as $item) {
        $bulanLabels[] = $item->bulan;
        $totalKasus[] = $item->total;
    }

    // Data kasus per bulan untuk semua tahun (opsional, untuk perbandingan multiyear)
    $kasusPerBulanByYear = [];

    foreach ($availableYears as $year) {
        $kasusPerBulanByYear[$year] = DB::table('kasus')
            ->where('tahun', $year)
            ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')")
            ->get(['bulan', 'jumlah_kasus']);
    }

    return view('admin.dashboard', compact(
        'stats',
        'kabupatens',
        'jumlahKasusDataLatih',
        'topKasus',
        'bulanLabels',
        'totalKasus',
        'data_latih',
        'kasusPerBulanByYear',
        'availableYears',
        'selectedYear',
        'tahunTersedia',
        'selectedYear'
    ));
}



    // Fungsi dashboard dengan filter tahun dinamis
    public function dashboard(Request $request)
    {
        $tahunTerpilih = $request->input('tahun', 2023);

        $data_latih = DB::table('data_latih')->get();

        $stats = DB::table('data_latih')
            ->selectRaw('
                ROUND(AVG(phbs), 2) AS persen_phbs_baik,
                ROUND(100 - AVG(phbs), 2) AS persen_phbs_tidak_baik,
                ROUND(AVG(imunisasi), 2) AS persen_imunisasi,
                ROUND(100 - AVG(imunisasi), 2) AS persen_tidak_imunisasi,
                ROUND(AVG(merokok), 2) AS persen_merokok,
                ROUND(100 - AVG(merokok), 2) AS persen_tidak_merokok
            ')
            ->first();

$jumlahKasusDataLatih = DB::table('data_latih')
    ->where('data_tahun', $tahunTerpilih)
    ->sum('kasus_2023');


        $kabupatens = DB::table('kabupatens')
            ->join('data_latih', 'kabupatens.nama', '=', 'data_latih.kecamatan')
            ->select('kabupatens.nama', 'kabupatens.latitude', 'kabupatens.longitude', 'data_latih.hipotesis')
            ->get();

        $topKasus = DB::table('data_latih')
            ->join('kabupatens', 'data_latih.kecamatan', '=', 'kabupatens.nama')
            ->select('kabupatens.nama', 'data_latih.kasus_2023')
            ->orderByDesc('data_latih.kasus_2023')
            ->take(5)
            ->get();

        $kasusPerBulan = DB::table('kasus')
            ->select('bulan', DB::raw('SUM(jumlah_kasus) as total'))
            ->where('tahun', $tahunTerpilih)
            ->groupBy('bulan')
            ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')")
            ->get();
        
        $bulanLabels = [];
        $totalKasus = [];

        foreach ($kasusPerBulan as $item) {
            $bulanLabels[] = $item->bulan;
            $totalKasus[] = $item->total;
        }
        
        $availableYears = DB::table('kasus')
                    ->selectRaw('YEAR(tanggal) as year')
                    ->distinct()
                    ->orderBy('year', 'desc')
                    ->pluck('year');

$selectedYear = 2023; // Sesuaikan defaultnya

// Lalu tambahkan ke compact
return view('admin.dashboard', compact(
    'stats',
    'kabupatens',
    'jumlahKasusDataLatih',
    'topKasus',
    'bulanLabels',
    'totalKasus',
    'data_latih',
    'tahunTersedia',
    'tahunTerpilih',
    'availableYears',
    'selectedYear'
));
    }
}