<?php

namespace App\Http\Controllers\Admin;

use App\Exports\PendaftaranExport;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\MsPeriode;
use App\Models\Pendaftaran;
use App\Models\Setting;
use App\Models\VPendaftaran;
use Maatwebsite\Excel\Facades\Excel;

class RekapPendaftaranController extends Controller
{
    private const CLOUMNS = [
        'no_peserta' => 'No Peserta',
        'nama'=> 'Nama',
        'nik'=> 'NIK',
        'tempat_lahir'=> 'Tempat Lahir',
        'tgl_lahir'=> 'Tgl Lahir',
        'usia' => 'Usia',
        'alamat_ktp'=> 'Alamat KTP',
        // 'kelurahan_ktp'=> 'Kelurahan KTP',
        // 'kecamatan_ktp'=> 'Kecamatan KTP',
        // 'Kabupaten_ktp'=> 'Kabupaten KTP',
        // 'provinsi_ktp'=> 'Provinsi KTP',
        // 'rt_ktp'=> 'RT KTP',
        // 'rw_ktp'=> 'RW KTP',
        'alamat_domisili'=> 'Alamat Domisili',
        // 'kelurahan_domisili'=> 'Kelurahan Domisili',
        // 'kecamatan_domisili'=> 'Kecamatan Domisili',
        // 'Kabupaten_domisili'=> 'Kabupaten Domisili',
        // 'provinsi_domisili'=> 'Provinsi Domisili',
        // 'rt_domisili'=> 'RT ',
        // 'rw_domisili'=> 'RW Domisili',
        'jenis_kelamin'=> 'Jenis Kelamin',
        'hp'=> 'HP',
        'gelar_depan'=> 'Gelar Depan',
        'gelar_belakang'=> 'Gelar Belakang',
        'kode_formasi' => 'Kode Formasi',
        'formasi' => 'Formasi',
        'jenis_formasi' => 'Jenis Formasi',
        'kejuruan' => 'Kejuruan',
        'lembaga' => 'Lembaga',
        'tahun_masuk' => 'Tahun Masuk',
        'tahun_lulus' => 'Tahun Lulus',
        'akreditasi' => 'Akreditasi',
        'ipk' => 'IPK',
        'gelar' => 'Gelar',
        'riwayat_pendidikan' => 'Riwayat Pendidikan',
        'validasi_at' => 'Valid',
        'tolak_at' => 'Ditolak',
        'catatan' => 'Catatan',
    ];

    public function index()
    {
        $data['columns'] = RekapPendaftaranController::CLOUMNS;
        $periode = MsPeriode::getCurrentPeriode();
        $data['filter']['periode_id'] = !is_null($periode) ? $periode->id : null;

        $data['periode'] = MsPeriode::query()
        ->orderBy('opened_at', 'desc')
        ->get();

        $data['current_periode'] = $periode;

        $data['rekap_settings'] = json_decode(Setting::query()->where('name', 'rekap_settings')->first()->value);

        return view('content.backend.rekap.index', $data);
    }

    public function print(Request $request)
    {
        $data['periodeId'] = !is_null($request->periode_id) ? decrypt($request->periode_id) : null;
        $data['formasiId'] = !is_null($request->formasi_id) ? decrypt($request->formasi_id) : null;
        $data['urut'] = $request->urut;
        $data['validasi'] = $request->validasi;
        $data['columns'] = [];

        $validasi = $request->validasi;

        foreach($request->columns as $key => $column){
            $data['columns'][$key] = RekapPendaftaranController::CLOUMNS[$key];
        }

        Setting::query()->updateOrCreate([
            'name' => 'rekap_settings'
        ], [
            'value' => json_encode($data)
        ]);


        $data['pendaftaran'] = VPendaftaran::query()
        ->with('biodata.biodataPendidikan.prodi.jenjangPendidikan')
        ->when($data['periodeId'], function($query, $periodeId){
            $query->where('periode_id', $periodeId);
        })
        ->when($data['formasiId'], function($query, $formasiId){
            $query->where('formasi_id', $formasiId);
        })
        ->when($data['urut'], function($query, $urut){
            $query->orderBy($urut);
        });

        if($validasi == '1'){
            $data['pendaftaran'] = $data['pendaftaran']->whereNotNull('validasi_at');
        }
        if($validasi == '-1'){
            $data['pendaftaran'] = $data['pendaftaran']->whereNotNull('tolak_at');
        }
        if($validasi == '0'){
            $data['pendaftaran'] = $data['pendaftaran']->whereNull('tolak_at') ->whereNull('validasi_at');
        }

        $data['pendaftaran'] = $data['pendaftaran']->get();

        if(!is_null($request->excel)){
            return Excel::download(new PendaftaranExport($data), 'REKAP_PENDAFTARAN.xlsx');
        }

        return view('content.backend.rekap.hasil_excel', $data);
    }
}
