<?php

namespace App\Actions\Admin\Dashboard;

use App\Actions\Shared\BaseAction;
use App\Models\ConfigApp;
use App\Models\jurusan;
use App\Models\Siswa;
use App\Traits\ApiResponseTrait;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Yajra\DataTables\DataTables;

class InfoSiswa extends BaseAction
{
    use ApiResponseTrait;

    public function __construct()
    {
        // $this->modelClass = jurusan::class;
    }

    public function status_kelulusan()
    {
        $now = Carbon::now('Asia/Jakarta');

        // Ambil waktu pengumuman, default ke null jika tidak ada
        $config = ConfigApp::whereIn('config_name', ['pengumuman_lulus_at', 'no_surat_skl'])
            ->get()
            ->pluck('config_value', 'config_name')
            ->toArray();

        $waktuPengumuman = $config
            ? Carbon::parse($config['pengumuman_lulus_at'], 'Asia/Jakarta')
            : null;

        $dataSiswa = ['status' => null];
        $dataSiswa = ['no_skl' => $config['no_surat_skl']];
        $message = 'Menunggu waktu pengumuman';


        // dd([
        //     'now' => $now->toDateTimeString(),
        //     'pengumuman' => $waktuPengumuman->toDateTimeString(),
        //     'result' => $now->greaterThanOrEqualTo($waktuPengumuman)
        // ]);

        // Jika waktu pengumuman valid dan sudah lewat
        if ($waktuPengumuman && $now->greaterThanOrEqualTo($waktuPengumuman)) {
            $siswa = Siswa::find(Auth::user()->biodata_id);

            if ($siswa) {
                $dataSiswa['status'] = str_replace(' ', '_', strtolower(trim($siswa->status_kelulusan)));
                // $dataSiswa['status'] = 'tidak_lulus';
                $message = 'Pengumuman telah tersedia';
            } else {
                $message = 'Data siswa tidak ditemukan';
            }
        }

        return $this->apiResponse($dataSiswa)
            ->message($message)
            ->send();
    }

    public function dashboard()
    {
        $data = [];
        $user = Auth::user();
        $biodataId = Auth::user()->biodata_id;
        $getSiswa = Siswa::find($biodataId);
        $dataApp = ConfigApp::all()
            ->groupBy('config_tipe')
            ->mapWithKeys(function ($items, $type) {
                return [
                    $type => $items->pluck('config_value', 'config_name')
                ];
            })->toArray();

        $dataSiswa = collect(optional($getSiswa)->toArray())->except(['id']); // Semua field Pegawai

        // $user = User::with('role')->where('id', Auth::id())->first();

        // $jurusanNeme = '';
        if (!empty($getSiswa->jurusan_id)) {
            $jurusan = Jurusan::where('id', $getSiswa->jurusan_id)->first();
            $jurusanNeme = $jurusan->nama_jurusan;
        }
        $dataSiswa = $dataSiswa->merge(['jurusan_name' => $jurusanNeme]);
        // $dataSiswa = $dataSiswa->merge(['pengumuman_at' => now()->addDays(0)->format('Y-m-d H:i:s'),]);
        $dataSiswa = $dataSiswa->merge(['pengumuman_at' => date('Y-m-d H:i:s', strtotime($dataApp['kbm']['pengumuman_lulus_at']))]);
        $dataSiswa = $dataSiswa->merge($dataApp['sekolah']);

        // // Ubah ke Collection
        // $userData = collect(optional($user)->toArray())->only(['username', 'primary_role_id']); // Filter hanya field tertentu dari User

        // // Tambahkan name dari role
        // $userData->put('role_name', optional($user->role)->name);

        // // Gabungkan Data Pegawai dan Data User
        // $result = $dataSiswa->merge($userData);
        // $result = $result->except(['jurusan_id', 'rombel_id','tingkat_id','primary_role_id']);

        // // Return JSON Response
        // return $result;
        // $data['biodata'] = $dataSiswa;

        return $this->apiResponse($dataSiswa)
            ->message('Data pengguna berhasil ditemukan')
            ->send();
    }
}
