<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Balita;
use App\Models\dataBalita;
use App\Models\Role;
use App\Models\Kriteria;
use App\Models\Nilai;

class RangkingController extends Controller
{

    public function index()
    {
        $balita = Balita::all();
        $roles = Role::all();
        $kriteria = Kriteria::all();
        $nilai = Nilai::all();

        $output = [];

        // Get the maximum values for each kdKriteria
        $maxNilaiByKriteria = $nilai->groupBy('kdKriteria')->map(function ($grouped) {
            return $grouped->max('nilai');
        });

        // Loop to collect values for each balita
        foreach ($balita as $b) {
            $kdbalita = $b->kdbalita;
            $namaBalita = $b->balita;
            // dd($balita);
            // Get values for the specific balita and convert to an array
            $nilaiBalita = $nilai->where('kdbalita', $kdbalita)->toArray();

            // Normalize the values based on the maximum value for each kdKriteria
            $normalizedNilai = array_map(function ($nilaiItem) use ($kriteria, $maxNilaiByKriteria) {
                $matchingKriteria = $kriteria->where('kdKriteria', $nilaiItem['kdKriteria'])->first();

                if ($matchingKriteria) {
                    $kdKriteria = $matchingKriteria->kdKriteria;

                    // Normalize the value using the corresponding max value for this kdKriteria
                    $maxValueForKriteria = $maxNilaiByKriteria->get($kdKriteria);
                    if ($maxValueForKriteria) {
                        $normalizedValue = $nilaiItem['nilai'] / $maxValueForKriteria;
                    }

                    $nilaiItem['bobot'] = $matchingKriteria->bobot;
                    $nilaiItem['kriteria'] = $matchingKriteria->kriteria;
                    $nilaiItem['normalized'] = $normalizedValue;
                    $nilaiItem['nilaimaximum'] = $maxValueForKriteria;
                    $nilaiItem['nilai_preferensi'] = $normalizedValue * $nilaiItem['bobot'];
                }
                return $nilaiItem;
            }, $nilaiBalita);

            // Calculate the total preferensi for this balita
            $totalPreferensi = array_sum(array_column($normalizedNilai, 'nilai_preferensi'));
            if ($totalPreferensi > 90) {
                $kategoriGizi = 'Gizi Baik';
            } elseif ($totalPreferensi >= 81 && $totalPreferensi <= 90) {
                $kategoriGizi = 'Gizi Sedang';
            } elseif ($totalPreferensi >= 71 && $totalPreferensi <= 80) {
                $kategoriGizi = 'Gizi Kurang';
            } else {
                $kategoriGizi = 'Gizi Buruk';
            }

            $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang');
            $berat_badan = dataBalita::where('nama_balita', $namaBalita)->value('berat_badan');
            $tinggi_badan = dataBalita::where('nama_balita', $namaBalita)->value('tinggi_badan');
            $nama_orangtua = dataBalita::where('nama_balita', $namaBalita)->value('nama_orangtua');
            $nik = dataBalita::where('nama_balita', $namaBalita)->value('nik');
            $alamat_rt_rw = dataBalita::where('nama_balita', $namaBalita)->value('alamat_rt_rw');
            $jenis_kelamin = dataBalita::where('nama_balita', $namaBalita)->value('jenis_kelamin');
            $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang');
            $tanggal_lahir = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_lahir');
            $umur_bulan = dataBalita::where('nama_balita', $namaBalita)->value('umur_bulan');
            $output[] = [
                'kdbalita' => $kdbalita,
                'nama_balita' => $namaBalita,
                'nilai' => $nilaiBalita,
                'berat_badan' => $berat_badan,
                'tinggi_badan' => $tinggi_badan,
                'tanggal_timbang' => $tanggal_timbang,
                'normalized_nilai' => $normalizedNilai,
                'total_preferensi' => $totalPreferensi,
                'kategori_gizi' => $kategoriGizi,
                'nik' => $nik,
                'alamat' => $alamat_rt_rw,
                'jenis_kelamin' => $jenis_kelamin,
                'tanggal_lahir' => $tanggal_lahir,
                'umur_bulan' => $umur_bulan,
                'nama_orangtua'=> $nama_orangtua
            ];
        }

        // dd($output);

        return view('pages.data_penilaian.index', [
            'output' => $output,
        ]);
    }
}
