<?php

namespace App\Controllers;

use App\Models\Matapelajaran_model;
use App\Models\Penilaian_model;
use PhpOffice\PhpSpreadsheet\IOFactory;

class Penilaian extends BaseController
{
    public function __construct()
    {
        $this->Penilaian_model = new Penilaian_model();
    }
    private $Penilaian_model;
    public function index()
    {
        // $ceklogin = cekLogin();
        // if ($ceklogin) return $ceklogin;
        // $user = getUserInfo();
        $setting = $this->appSetting();
        $data = [
            // 'nama_user' => $user->nama,
            'setting' => $setting,
            'title' => 'Mata Pelajaran'
        ];
        return view('Admin/Penilaian/leger-list', $data);
    }
    public function getData()
    {
        $exec = $this->Penilaian_model->get_all_penilaian();
        return $this->response->setJSON($exec);
    }

    public function import()
    {
        // Mendapatkan file yang diunggah
        $file = $this->request->getFile('xlsx_file');

        // Load Excel
        $spreadsheet = IOFactory::load($file);

        // Mendapatkan data dari sheet "Nilai"
        $sheet = $spreadsheet->getSheetByName('Nilai');
        $sheetData = $sheet->rangeToArray('A1:' . $sheet->getHighestColumn() . $sheet->getHighestRow(), null, true, true, true);

        // Ambil semua kode mapel yang ada di database
        $mapelModel = new Matapelajaran_model;
        $existingMapels = $mapelModel->where('status', 'aktif')->findAll();
        $existingMapelCodes = array_column($existingMapels, 'kode');
        $semester = $sheetData[3]['C'];
        $tahun_lulus = $sheetData[4]['C'];
        // Siapkan array untuk batch insert atau update
        $dataToUpdate = [];
        $dataToInsert = [];

        // Mulai dari baris ke-6 untuk mengabaikan header
        for ($rowIndex = 6; $rowIndex <= $sheet->getHighestRow(); $rowIndex++) {
            $rowData = $sheetData[$rowIndex];

            // Ambil nilai NIS dari kolom B pada setiap baris
            $nis = $rowData['B'];

            // Loop untuk mengakses kolom nilai (kode_mapel dan nilai dimulai dari kolom ke-5)
            foreach ($rowData as $colIndex => $value) {
                if ($colIndex >= 'E' && !is_null($value)) { // Mulai dari kolom E dan pastikan nilainya tidak null
                    $kode_mapel = $sheetData[5][$colIndex]; // Ambil kode mapel dari baris ke-5 pada kolom yang sesuai
                    $nilai = $value; // Ambil nilai dari kolom saat ini
                    // var_dump($kode_mapel . " " . $nilai);
                    // exit;
                    // Periksa apakah kode mapel ada di database dan data tidak kosong
                    if (in_array($kode_mapel, $existingMapelCodes) && !empty($nilai)) {
                        // Cek apakah data dengan NIS dan kode mapel sudah ada
                        // Ganti dengan model Anda
                        $existingData = $this->Penilaian_model->where('nis', $nis)
                            ->where('kode_mapel', $kode_mapel)
                            ->first();

                        if ($existingData) {
                            // Jika data sudah ada, tambahkan ke array untuk update
                            $dataToUpdate[] = [
                                'id' => $existingData['id'],
                                'nilai' => $nilai
                            ];
                        } else {
                            // Jika data belum ada, tambahkan ke array untuk insert
                            $dataToInsert[] = [
                                'nis' => $nis,
                                'kode_mapel' => $kode_mapel,
                                'nilai' => $nilai,
                                'semester' => $semester,
                                'tahun_lulus' => $tahun_lulus,
                            ];
                        }
                    }
                }
            }
        }
        // Lakukan update data
        if (!empty($dataToUpdate)) {
            $this->Penilaian_model->updateBatch($dataToUpdate, 'id');
        }

        // Lakukan insert data baru
        if (!empty($dataToInsert)) {
            $this->Penilaian_model->insertBatch($dataToInsert);
        }

        // Buat respons JSON
        $response = [
            'success' => true,
            'message' => 'Impor berhasil!'
        ];

        return $this->response->setJSON($response);
    }
}
