<?php

namespace App\Http\Controllers\Operator;

use DB;
use URL;

use Auth;
use Uuid;
use Alert;
use Crypt;
use App\Models\Jenis;
use App\Models\Periode;

use App\Models\Kelompok;
use Illuminate\Http\Request;
use App\Models\KelompokDetail;
use App\Http\Controllers\Controller;

class KelompokController extends Controller
{
    public function index()
    {
        $periode    = Periode::query()->get();
        return view('backend.operator.kelompok.index', compact('periode'))->withTitle('Daftar Kelompok');
    }

    /* AJAX request */
    public function getData(Request $request){
        // parameter
        $status = $request->get('status');
        $tahun= $request->get('tahun');

        if($tahun == '0')
        {
            $periode = Periode::where('status', '1')->first();
            $tahun = $periode->periode_id;
        }
        else
        {
            $periode = Periode::where('nama', $tahun)->first();
        }

        ## Read value
        $draw = $request->get('draw');
        $start = $request->get("start");
        $rowperpage = $request->get("length"); // Rows display per page

        $columnIndex_arr = $request->get('order');
        $columnName_arr = $request->get('columns');
        $order_arr = $request->get('order');
        $search_arr = $request->get('search');

        $columnIndex = $columnIndex_arr[0]['column']; // Column index
        $columnName = $columnName_arr[$columnIndex]['data']; // Column name
        $columnSortOrder = $order_arr[0]['dir']; // asc or desc
        $searchValue = strtoupper($search_arr['value']); // Search value

        // Total records
        $statementGlobal = " KELOMPOK.STATUS_HAPUS = '0' ";

        if($status != "0")
        {
            // dikurang 1 karena di view mulai dari 0 sedangkan 0 itu menunggu persetujuan
            $status = $status - 1;
            $statementGlobal .= " AND STATUS = '".$status."'";
        }

        if($tahun == '0')
        {}
        else
        {
            $statementGlobal .= " AND PERIODE_ID = '".$periode->periode_id."'";
        }

        $totalRecords = Kelompok::select('count(1) as allcount')->whereRaw($statementGlobal)->count();
        $statement = " AND B.STATUS_KETUA = '1' AND (UPPER(NAMA_DOSEN) LIKE '%".$searchValue."%' OR (UPPER(NAMA) LIKE '%".$searchValue."%') OR (UPPER(NIM) LIKE '%".$searchValue."%')) ";

        $totalRecordswithFilter =   Kelompok::select('count(1) as allcount')
                                    ->join('kelompok_detil as b', 'kelompok.kelompok_id', '=', 'b.kelompok_id')
                                    ->whereRaw($statementGlobal.$statement)->count();

        // Fetch records
        $records = Kelompok::orderBy($columnName,$columnSortOrder)
            ->join('kelompok_detil as b', 'kelompok.kelompok_id', '=', 'b.kelompok_id')
            ->whereRaw($statementGlobal.$statement)
            ->selectRaw('kelompok.kelompok_id, kode, nama_dosen, nidn_dosen, status, ambil_ketua_kelompok(kelompok.kelompok_id) ketua')
            ->skip($start)
            ->take($rowperpage)
            ->get();

        $data_arr = array();

        foreach($records as $record){
            $kelompok_id = $record->kelompok_id;
            $kode = $record->kode;
            $ketua = $record->ketua;
            $ketua = explode('###', $record->ketua);
            $nama_ketua = $ketua[0];
            $nim_ketua = $ketua[1];

            $nama_dosen = $record->nama_dosen;
            $nidn_dosen = $record->nidn_dosen;
            $status = $record->status;

            if($status == '1')
            {
                $keterangan = '<span class="badge bg-success">Disetujui Dosen</span>';
                $aksi = '<a class="btn btn-danger btn-sm waves-effect waves-light aksi" role="button" data-ket="Kelompok yang di hapus tidak bisa untuk upload proposal" data-info="Menghapus Kelompok" data-id="'.Crypt::encrypt($kelompok_id.'#3').'"><i class="fas fa-times"></i></a>';
            }
            elseif($status == '2' || $status == '3')
            {
                if($status == '2')
                    $keterangan = '<span class="badge bg-danger">Ditolak Dosen</span>';
                else
                    $keterangan = '<span class="badge bg-danger">Dibatalkan Operator</span>';
                $aksi = '<a class="btn btn-warning btn-sm waves-effect waves-light aksi" role="button" data-ket="Kelompok yang di dibatalkan status tolak akan menunggu di verifikasi kembali oleh dosen pembimbing." data-info="Membatalkan Status Tolak Kelompok" data-id="'.Crypt::encrypt($kelompok_id.'#0').'"><i class="fas fa-undo"></i></a>';
            }
            else
            {
                $keterangan = '<span class="badge bg-warning">Menunngu Persetujuan Dosen</span>';
                $aksi = '<a class="btn btn-success btn-sm waves-effect waves-light aksi" role="button" data-ket="Kelompok yang di setujui akan di teruskan untuk upload proposal" data-info="Menyetujui Kelompok" data-id="'.Crypt::encrypt($kelompok_id.'#1').'"><i class="fas fa-check"></i></a> <a class="btn btn-danger btn-sm waves-effect waves-light aksi" role="button" data-ket="Kelompok yang tidak di setujui tidak bisa untuk upload proposal" data-info="Menghapus Kelompok" data-id="'.Crypt::encrypt($kelompok_id.'#2').'"><i class="fas fa-times"></i></a>';
            }

            $aksi .= ' <a class="btn btn-primary btn-sm waves-effect waves-light viewdetails" role="button" data-id="'.Crypt::encrypt($kelompok_id).'"><i class="fas fa-eye"></i></a>';

            $data_arr[] = array(
                "kelompok_id" => $kelompok_id,
                "kode" => $kode,
                "nama_ketua" => $nama_ketua,
                "nim_ketua" => $nim_ketua,
                "nama_dosen" => $nama_dosen,
                "nidn_dosen" => $nidn_dosen,
                "keterangan" => $keterangan,
                "aksi" => $aksi
            );
        }

        $response = array(
            "draw" => intval($draw),
            "iTotalRecords" => $totalRecords,
            "iTotalDisplayRecords" => $totalRecordswithFilter,
            "aaData" => $data_arr
        );

        echo json_encode($response);
        exit;
    }

    public function getDetil(Request $request)
    {
        $reqKelompokId = Crypt::decrypt($request->kelompok_id);
        $kelompok_detil = KelompokDetail::where('kelompok_id', $reqKelompokId)->get();

        $data = '';
        $no = 1;
        $anggota= 0;
        foreach ($kelompok_detil as $key => $value) {
            if($value->status_ketua == 1)
                $keterangan = "Ketua";
            else
            {
                $anggota++;
                $keterangan = "Anggota ".$anggota?:1;
            }
            $data .= "
                            <tr>
                                <td>".$no."</td>
                                <td>".$value->nama."</td>
                                <td>".$value->nim."</td>
                                <td>".$value->fakultas."</td>
                                <td>".$value->prodi."</td>
                                <td>".$keterangan."</td>
                            </tr>
                    ";
            $no++;
        }
        $response['html'] = $data;
        echo json_encode($response);
    }

    public function create()
    {

    }

    public function store(Request $request)
    {

    }

    public function edit($id)
    {

    }

    public function update(Request $request, $id)
    {

    }

    public function destroy($id)
    {

    }

    public function prosesKelompok(Request $request)
    {
        $kel = $request->except('_token');

        $arrKel = explode('#', decrypt($kel['kelompokId']));
        $reqKelompokId = $arrKel['0'];
        $reqStatus = $arrKel['1'];

        $kelompok = Kelompok::query()->find($reqKelompokId);

        $kelompok->status = $reqStatus;
        $kelompok->save();

        return response()->json([
            'status' => 'success',
            'message' => 'Data Berhasil diubah.',
        ]);
    }
}
