<?php

namespace App\Http\Controllers\Penerbit;

use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\PengajuanAkreditasi;
use App\Models\PengajuanAkreditasiFile;
use Illuminate\Support\Facades\DB;
use App\Services\PenerbitAkreditasiService;

class PengajuanAkreditasiController extends Controller
{


    protected PenerbitAkreditasiService $penerbitAkreditasiService;

    public function __construct()
    {
        $this->penerbitAkreditasiService = new PenerbitAkreditasiService();
    }

    public function daftar()
    {
        return view('penerbit.pengajuan_akreditasi.list');
    }

    public function detail($id)
    {
        $session =  session('penerbit') == null ? session('penilai') : session('penerbit');
        if (!$session) return redirect('/login');

        $akreditasi = PengajuanAkreditasi::where('pengajuan_akreditasi.id', $id)
            ->leftJoin('status', 'status.id', '=', 'pengajuan_akreditasi.status_penilaian')
            ->select(['pengajuan_akreditasi.*', 'status.nama_status'])
            ->first();
        $list1 = array();
        $listitem = DB::table('asesmen_item')->select('item_no', 'tabel_penilaian')->whereIn('item_no', [1])->distinct()->get();
        foreach ($listitem as $item) {
            $detail = DB::table('v_pengajuan_akreditasi_item')
                ->where('pengajuan_akreditasi_id', $id)
                ->where('item_no', $item->item_no)
                ->get()
                ->toArray();
            $list1[] = array('no' => $item->item_no, 'table' => $item->tabel_penilaian, 'detail' => $detail);
        }
        $data['asesmen_item1'] = $list1;

        $list2 = array();
        $listitem = DB::table('asesmen_item')->select('item_no', 'tabel_penilaian')->whereIn('item_no', [2])->distinct()->get();
        foreach ($listitem as $item) {
            $detail = DB::table('v_pengajuan_akreditasi_item')
                ->where('pengajuan_akreditasi_id', $id)
                ->where('item_no', $item->item_no)
                ->get()
                ->toArray();
            $list2[] = array('no' => $item->item_no, 'table' => $item->tabel_penilaian, 'detail' => $detail);
        }
        $data['asesmen_item2'] = $list2;
        $list3 = array();
        $listitem = DB::table('asesmen_item')->select('item_no', 'tabel_penilaian')->whereIn('item_no', [7, 8])->distinct()->get();
        foreach ($listitem as $item) {
            $detail = DB::table('v_pengajuan_akreditasi_item')
                ->where('pengajuan_akreditasi_id', $id)
                ->where('item_no', $item->item_no)
                ->get()
                ->toArray();
            $list3[] = array('no' => $item->item_no, 'table' => $item->tabel_penilaian, 'detail' => $detail);
        }
        $data['asesmen_item3'] = $list3;

        $list4 = array();
        $listitem = DB::table('asesmen_item')->select('item_no', 'tabel_penilaian')->whereIn('item_no', [9])->distinct()->get();
        foreach ($listitem as $item) {
            $detail = DB::table('v_pengajuan_akreditasi_item')
                ->where('pengajuan_akreditasi_id', $id)
                ->where('item_no', $item->item_no)
                ->get()
                ->toArray();
            $list4[] = array('no' => $item->item_no, 'table' => $item->tabel_penilaian, 'detail' => $detail);
        }

        $data['asesmen_item4']              = $list4;

        $data['akreditasi']                 = $akreditasi;
        $data['pengajuan_akreditasi_file']  = PengajuanAkreditasiFile::where('pengajuan_akreditasi_id', $akreditasi->id)->orderby('created_at', 'desc')->get();
        
        if ($akreditasi->status_penilaian == 1)
            return view('penerbit.pengajuan_akreditasi.detail_draft', $data);

        return view('penerbit.pengajuan_akreditasi.detail', $data);
    }

    public function pengajuan($id)
    {
        $session =  session('penerbit') == null ? session('penilai') : session('penerbit');
        if (!$session) return redirect('/login');

        if(empty($id)){
            return redirect('/penerbit/daftar-pengajuan-akreditasi'); 
        }

        $data       = Helper::item();
        $data['id'] = $id;
        return view('penerbit.pengajuan_akreditasi.add', $data);
    }

    public function simpan(Request $request)
    {
        return $this->penerbitAkreditasiService->saveAkreditasi($request);
    }

    public function perbaikan($id)
    {
        return $this->penerbitAkreditasiService->perbaikan($id);
    }

    public function detailPerbaikan($id)
    {
        $session =  session('penerbit') == null ? session('penilai') : session('penerbit');
        if (!$session) return redirect('/login');

        $data       = Helper::item();
        $data['id'] = $id;
        return view('penerbit.pengajuan_akreditasi.add', $data);
    }


    public function check()
    {
        return $this->penerbitAkreditasiService->check();
    }
}
