<?php

namespace App\Http\Controllers;

use App\Models\DimensiKuesioner;
use App\Models\JawabanKuesioner;
use App\Models\Siswa;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class RekapKuesionerController extends Controller
{
    public function index(Request $request)
    {
        $minggu = $request->input('minggu', now()->weekOfYear);
        $tahun = $request->input('tahun', now()->year);

        $rekap = DB::table('jawaban_kuesioners')
            ->join('pertanyaan_kuesioners', 'jawaban_kuesioners.pertanyaan_id', '=', 'pertanyaan_kuesioners.id')
            ->join('dimensi_kuesioners', 'pertanyaan_kuesioners.dimensi_id', '=', 'dimensi_kuesioners.id')
            ->where('jawaban_kuesioners.minggu_ke', $minggu)
            ->where('jawaban_kuesioners.tahun', $tahun)
            ->select(
                'jawaban_kuesioners.siswa_id',
                'dimensi_kuesioners.id as dimensi_id',
                'dimensi_kuesioners.nama as dimensi_nama',
                DB::raw('AVG(jawaban_kuesioners.nilai) as rata_rata')
            )
            ->groupBy('jawaban_kuesioners.siswa_id', 'dimensi_kuesioners.id', 'dimensi_kuesioners.nama')
            ->get()
            ->groupBy(['siswa_id', 'dimensi_nama']); // Perubahan penting di sini

        $siswaList = Siswa::whereIn('id_siswa', $rekap->keys())->get()->keyBy('id_siswa');

        // Ambil semua dimensi yang ada untuk header tabel
        $allDimensi = DimensiKuesioner::pluck('nama', 'id');

        return view('rekapkuesioner.index', compact('rekap', 'siswaList', 'minggu', 'tahun', 'allDimensi'));
    }

    public function detail($id_siswa)
    {
        $minggu = request()->input('minggu', now()->weekOfYear);
        $tahun = request()->input('tahun', now()->year);

        $siswa = Siswa::findOrFail($id_siswa);

        $jawaban = JawabanKuesioner::with(['pertanyaan.dimensi'])
            ->where('siswa_id', $id_siswa)
            ->where('minggu_ke', $minggu)
            ->where('tahun', $tahun)
            ->get()
            ->groupBy('pertanyaan.dimensi.nama');

        $dimensiList = DimensiKuesioner::all();
        $nilaiPerDimensi = [];
        foreach ($jawaban as $namaDimensi => $jawabanDimensi) {
            $rata2 = $jawabanDimensi->avg('nilai');
            $nilaiPerDimensi[$namaDimensi] = round($rata2, 2);
        }

        return view('rekapkuesioner.detail', compact('siswa', 'jawaban', 'dimensiList', 'minggu', 'tahun', 'nilaiPerDimensi'));
    }
}
