<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\ProfileSekolah as Profile;
use App\Models\Kuesioner;
use App\Models\KuesionerLog;
use App\Models\Master\Sekolah;
use App\Models\Master\Provinsi;
use App\Models\Master\MasterGroup;
use App\Models\Master\Kabupaten;
use App\Models\Master\Kecamatan;
use App\Models\SK;
use App\Models\User;

class ProfileController extends Controller
{
    protected $template = 'modules.profile';
    protected $route = 'modules.profile';

    function lengkapi($npsn) {
        permission('is_read', $this->route, 'module',true);

        $keyId = decode_id($npsn);

        $data['breadcrumbs'] = [
            ['name' => 'Dashboard','url' => url('dashboard')],
            ['name' => 'Profile','active' => true],
        ];
        $data['title'] = 'Profile';
        $data['route'] = $this->route;
        $data['provinsi'] = Provinsi::where('kode_wilayah','010000')->get();
        $data['user'] = User::where('username',$keyId)->first();

        

        return view($this->template.'.lengkapi',$data);
    }

    function updateLengkapi(Request $request) {

        try {
            DB::beginTransaction();
            Validator::make($request->all(), [
                    'name'            => 'required',
                    'status_sekolah'  => 'required',
                    'alamat_sekolah'  => 'required',
                    'npsn'            => 'required',
                    'tingkat_sekolah' => 'required',
                    "provinsi"        => "required",
                    "kabupaten"       => "required",
                    "kecamatan"       => "required",
                ])->validate();
            
            $sekolah = new Sekolah;
            $sekolah->ms_provinsi_id        = decode_id($request->provinsi);
            $sekolah->ms_kabupaten_id       = decode_id($request->kabupaten);
            $sekolah->ms_kecamatan_id       = decode_id($request->kecamatan);
            $sekolah->ms_tingkat_sekolah_id = $request->tingkat_sekolah;
            $sekolah->status                = $request->status_sekolah;
            $sekolah->nama_sekolah          = $request->name;
            $sekolah->npsn                  = $request->npsn;
            $sekolah->alamat_sekolah        = $request->alamat_sekolah;
            $sekolah->lat                   = $request->lat;
            $sekolah->long                  = $request->long;
            $sekolah->save();

            //profile

            $profile = new Profile;
            $profile->npsn = $request->npsn;
            $profile->ms_tingkat_sekolah_id = $request->tingkat_sekolah;
            $profile->status_sekolah = $request->status_sekolah;
            $profile->alamat_sekolah        = $request->alamat_sekolah;
            $profile->ms_provinsi_id        = decode_id($request->provinsi);
            $profile->ms_kabupaten_id       = decode_id($request->kabupaten);
            $profile->ms_kecamatan_id       = decode_id($request->kecamatan);
            $profile->lat                   = $request->lat;
            $profile->long                  = $request->long;
            $profile->ms_sekolah_id         = $sekolah->MsSekolahId;
            $profile->kontak_person         = session('kontak_person');
            $profile->telp = session('telp');
            $profile->user_id = auth()->user()->id;
            $profile->save();

            DB::commit();
            return redirect('dashboard');

        } catch (Exception $e) {
            DB::rollBack();
            return redirect()->back()->with([
                     'message' => $e->getMessage(),
                     'type'    => "error"
                ]);
        }
    }

    function profile(){
        
        permission('is_read', $this->route, 'module',true);

        $data['breadcrumbs'] = [
            ['name' => 'Dashboard','url' => url('dashboard')],
            ['name' => 'Profile','active' => true],
        ];
        $data['title'] = 'Profile';
        $data['route'] = $this->route;
        $data['keyId'] = encode_id(auth()->user()->id);
        $data['item'] = User::with('profile')->where('id',auth()->user()->id)->first();
        $data['group'] = MasterGroup::where('MsGroupId','!=',1)->get();
        $data['kabupaten'] = Kabupaten::all();
        return view($this->template.'.profile', $data);
    }

    function profileStore(Request $request) {
        try {

            $keyId = decode_id($request->secure_id);

            if(@$keyId){

                Validator::make($request->all(), [
                    'name'            => 'required',
                    'status_sekolah'  => 'required',
                    'alamat_sekolah'  => 'required',
                    'kontak_person'   => 'required',
                    'telp'            => 'required',
                    'password'        => 'nullable|min:8|max:15|regex:/[a-z]/|regex:/[A-Z]/|regex:/[0-9]/|regex:/[@$!%*#?&]/', //min 8 char, maks 15 char, min 1 symbol, min 1 uppercase, min 1 lowercase, 1 number
                ],[
                    'password.min' => 'password Minimal 8 Karakter',
                    'password.max' => 'password Maksimal 15 Karakter',
                    'password.regex' => 'Format Kata Sandi harus mengandung minimal Huruf Besar, Huruf Kecil, Angka, Spesial Karakter',
                ])->validate();

                $profile = Profile::where('npsn',auth()->user()->profile->npsn)->first();
                $profile->alamat_sekolah        = $request->alamat_sekolah;
                $profile->kontak_person         = $request->kontak_person;
                $profile->telp                  = $request->telp;
                $profile->lat                   = $request->lat;
                $profile->long                  = $request->long;
                $profile->save();
                
                $user = User::find($keyId);
                if(@$request->password){
                    $user->password = Hash::make($request->password);
                }
                $user->name     = $request->name;
                $user->save();
            }

            return redirect()->back()->with([
                'message' => 'Berhasil update data',
                'type'    => 'success',
            ]);
            
        } catch (Exception $e) {
            return redirect()->back()->with([
                     'message' => $e->getMessage(),
                     'type'    => "error"
                ]);
        }
    }

    public function index()
    {
        permission('is_read', $this->route, 'module',true);

        $data['title'] = 'Profile Sekolah';
        $data['route'] = $this->route;
        if(session('group_alias') == 'sekolah'){

            $profile = Profile::where('user_id',auth()->user()->id)->first();
            $jumlah = json_decode($profile->data_jumlah);
            $data['jumlah_peserta_didik']         = @$jumlah->jumlah_peserta_didik;
            $data['jumlah_tenaga_pendidik']       = @$jumlah->jumlah_tenaga_pendidik;
            $data['jumlah_tenaga_kependidikan']   = @$jumlah->jumlah_tenaga_kependidikan;
            $data['jumlah_warga_sekolah_lainnya'] = @$jumlah->jumlah_warga_sekolah_lainnya;
            $data['jumlah_biopori']               = @$jumlah->jumlah_biopori;
            $data['jumlah_sumur_resapan']         = @$jumlah->jumlah_sumur_resapan;
            $data['jumlah_pohon']                 = @$jumlah->jumlah_pohon;

            $air = json_decode($profile->penghematan_air);
            $data['air_sebelum_pblhs'] = @$air->air_sebelum_pblhs;
            $data['air_setelah_pblhs'] = @$air->air_setelah_pblhs;

            $listrik = json_decode($profile->penghematan_listrik);
            $data['listrik_sebelum_pblhs'] = @$listrik->listrik_sebelum_pblhs;
            $data['listrik_setelah_pblhs'] = @$listrik->listrik_setelah_pblhs;
            $data['luas_ruangan_ac']       = @$listrik->luas_ruangan_ac;
            $data['luas_ruangan_non_ac']   = @$listrik->luas_ruangan_non_ac;
            $data['jumlah_kader']          = @$listrik->jumlah_kader;
            $data['sk']         = SK::where('tahun',date('Y'))->where('sekolah','like','%'.session('sekolah_id').'%')->first();
            
            return view($this->template.'.sekolah', $data);
        }else{
            $data['provinsi'] = Provinsi::where('kode_wilayah','010000')->get();
            if(session('kabupaten_id') != ''){
                $data['kecamatan'] = Kecamatan::where('ms_kabupaten_id',session('kabupaten_id'))->get();
            }
            return view($this->template.'.admin', $data);
        }
    }

    public function grid(Request $request)
    {
        $_data = [];
        

        $profile = Profile::groupBy('ms_sekolah_id')->pluck('ms_sekolah_id')->toArray();
        
        if((session('kabupaten_id') != '') || (session('kabupaten_id') != null)){
            $kuesioner  = Kuesioner::with('sekolah')->whereHas('sekolah',function($query){
                $query->where('ms_kabupaten_id',session('kabupaten_id'));
            })->whereIn('ms_sekolah_id',$profile)->orderBy('created_at','DESC');

            // $sekolah = Sekolah::whereIn('MsSekolahId',$profile)->where('ms_kabupaten_id',session('kabupaten_id'));
        }else{
            $kuesioner  = Kuesioner::with('sekolah')->whereIn('ms_sekolah_id',$profile)->orderBy('created_at','DESC');
            // $sekolah = Sekolah::whereIn('MsSekolahId',$profile);
        }

        if(@request()->tingkat){
            $kuesioner->whereHas('sekolah',function($query){
                $query->where('ms_tingkat_sekolah_id',request()->tingkat);
            });
        }
        if(@request()->status_sekolah){
            $kuesioner->whereHas('sekolah',function($query){
                $query->where('status',request()->status_sekolah);
            });
        }
        if(@request()->provinsi != 0){
            $kuesioner->whereHas('sekolah',function($query){
                $query->where('ms_provinsi_id',decode_id(request()->provinsi));
            });
        }
        if(@request()->kabupaten != 0){
            $kuesioner->whereHas('sekolah',function($query){
                $query->where('ms_kabupaten_id',decode_id(request()->kabupaten));
            });
        }
        if(@request()->kecamatan != 0){
            $kuesioner->whereHas('sekolah',function($query){
                $query->where('ms_kecamatan_id',decode_id(request()->kecamatan));
            });
        }

        foreach ($kuesioner->get() as $key => $row) {

            $action = '';

            if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){
                $action .= '<a href="'.url('profile-sekolah/update/'.encode_id($row->sekolah->MsSekolahId)).'" data-toggle="tooltip" title="Edit Data" class="btn btn-xs btn-block btn-primary"><i class="fal fa-pencil text-white"></i></a>';
            }

            $log  = KuesionerLog::where('kuesioner_id',@$row->KuesionerId)->orderBy('created_at','DESC')->first();
            if(@$log){
                $progress = '<span class="badge bg-warning-light text-warning">'.str_replace('_',' ',\Str::title($log->step)).'</span>';
            }else{
                $progress = StatusActivity($row->sekolah->MsSekolahId);
            }

                if(@$row->level == 0){
                    $penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Belum Pernah';
                }elseif(@$row->level == 1){
                    $penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Kab/Kota';
                }elseif(@$row->level == 2){
                    $penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Provinsi';
                }elseif(@$row->level == 3){
                    $penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Nasional';
                }elseif(@$row->level == 4){
                    $penghargaan = '<i class="fal fa-trophy"></i>&nbsp;Adiwiyata Mandiri';
                }else{
                    $penghargaan = '-';
                }

            if($row){
                if((@$row->level+1) == 1){
                    $jenis_usulan = 'Adiwiyata Kab/Kota';
                }elseif((@$row->level+1) == 2){
                    $jenis_usulan = 'Adiwiyata Provinsi';
                }elseif((@$row->level+1) == 3){
                    $jenis_usulan = 'Adiwiyata Nasional';
                }elseif((@$row->level+1) == 4){
                    $jenis_usulan = 'Adiwiyata Mandiri';
                }
            }else{
                $jenis_usulan = '-';
            }
            

            $penilaian = '';
            $penilaian .= '<span style="width:100%;" class="text-left badge bg-secondary text-secondary"> Sekolah : '.getNilaiAll('sekolah',$row->sekolah->MsSekolahId,$row->KuesionerId).'</span></br>';
            if((@$row->level+1) == 1){
                $penilaian .= '<span style="width:100%;" class="text-left badge bg-primary-light text-primary"> Kota : '.getNilaiAll('kota',$row->sekolah->MsSekolahId,$row->KuesionerId).'</span></br>';
            }
            if((@$row->level+1) == 2){
                $penilaian .= '<span style="width:100%;" class="text-left badge bg-primary-light text-primary"> Kota : '.getNilaiAll('kota',$row->sekolah->MsSekolahId,$row->KuesionerId).'</span></br>';
                $penilaian .= '<span style="width:100%;" class="text-left badge bg-success-light text-success"> Provinsi : '.getNilaiAll('provinsi',$row->sekolah->MsSekolahId,$row->KuesionerId).'</span></br>';
            }

            $sekolah = '';
            $sekolah .= @$row->sekolah->nama_sekolah.'<br>';
            $sekolah .= '<span class="badge bg-success-light text-success">'.@$row->profile->tingkat->name.'</span>&nbsp;';
            $sekolah .= '<span class="badge bg-primary-light text-primary mt-1">'.@$row->profile->status_sekolah.'</span>&nbsp;';
            $sekolah .= '<span class="badge bg-info-light text-info">Level '.levelAdiwiyata($row->npsn).'</span>';
            $sekolah .= '<span class="badge bg-secondary text-secondary text-left mt-1">'.@$row->profile->alamat_sekolah.'</span>&nbsp;';

            $_data[] = [
                'no'                => $key+1,
                'id'                => encode_id($row->id),
                'npsn'              => $row->npsn,
                'sekolah'           => $sekolah,
                'nama'              => $row->sekolah->nama_sekolah,
                'status_level'      => '<span class="badge bg-success-light text-success">Level '.levelAdiwiyata($row->npsn).'</span>',
                'kecamatan'         => $row->sekolah->kecamatan->name,
                'wilayah'           => $row->sekolah->kabupaten->name,
                'tanggal_level'     => '-',
                'penghargaan'       => $penghargaan,
                'dok'               => '-',
                'kriteria'          => $penilaian,
                'jenis_usulan'      => $jenis_usulan,
                'usulkan_csa'       => $progress,
                'perpanjang_csa'    => '-',
                'action'    => $action,
            ];

        }

        return response()->json($_data);
    }

    public function store(Request $request)
    {
        permission('is_update', $this->route, 'module',true);

        try {
            Validator::make($request->all(), [
                'jumlah_peserta_didik'         => 'required',
                'jumlah_tenaga_pendidik'       => 'required',
                'jumlah_tenaga_kependidikan'   => 'required',
                'jumlah_warga_sekolah_lainnya' => 'required',
                'jumlah_biopori'               => 'required',
                'jumlah_sumur_resapan'         => 'required',
                'jumlah_pohon'                 => 'required',

                'air_sebelum_pblhs'            => 'required',
                'air_setelah_pblhs'            => 'required',

                'listrik_sebelum_pblhs'        => 'required',
                'listrik_setelah_pblhs'        => 'required',
                'luas_ruangan_ac'              => 'required',
                'luas_ruangan_non_ac'          => 'required',
                'jumlah_kader'                 => 'required',
            ],[
                'jumlah_peserta_didik.required'         => 'Jumlah Peserta Didik Tidak Boleh Kosong',
                'jumlah_tenaga_pendidik.required'       => 'Jumlah Tenaga Pendidik Tidak Boleh Kosong',
                'jumlah_tenaga_kependidikan.required'   => 'Jumlah Tenaga Kependidikan Tidak Boleh Kosong',
                'jumlah_warga_sekolah_lainnya.required' => 'Jumlah Warga Sekolah Lainnya Tidak Boleh Kosong',
                'jumlah_biopori.required'               => 'Jumlah Biopori Tidak Boleh Kosong',
                'jumlah_sumur_resapan.required'         => 'Jumlah Sumur Resapan Tidak Boleh Kosong',
                'jumlah_pohon.required'                 => 'Jumlah Pohon Tidak Boleh Kosong',

                'air_sebelum_pblhs.required'            => 'Penghematan Air Sebelum PBLHS Tidak Boleh Kosong',
                'air_setelah_pblhs.required'            => 'Penghematan Air Setelah PBLHS Tidak Boleh Kosong',

                'listrik_sebelum_pblhs.required'        => 'Penghematan Listrik Sebelum PBLHS Tidak Boleh Kosong',
                'listrik_setelah_pblhs.required'        => 'Penghematan Listrik Setelah PBLHS Tidak Boleh Kosong',
                'luas_ruangan_ac.required'              => 'Penghematan Listrik Luas Ruangan Ber-AC Tidak Boleh Kosong',
                'luas_ruangan_non_ac.required'          => 'Penghematan Listrik Luas Ruangan Non-AC Tidak Boleh Kosong',
                'jumlah_kader.required'                 => 'Jumlah Kader Tidak Boleh Kosong',
            ])->validate();

            // dd($request->all());

            $jumlah = [];
            $jumlah['jumlah_peserta_didik']         = $request->jumlah_peserta_didik;
            $jumlah['jumlah_tenaga_pendidik']       = $request->jumlah_tenaga_pendidik;
            $jumlah['jumlah_tenaga_kependidikan']   = $request->jumlah_tenaga_kependidikan;
            $jumlah['jumlah_warga_sekolah_lainnya'] = $request->jumlah_warga_sekolah_lainnya;
            $jumlah['jumlah_biopori']               = $request->jumlah_biopori;
            $jumlah['jumlah_sumur_resapan']         = $request->jumlah_sumur_resapan;
            $jumlah['jumlah_pohon']                 = $request->jumlah_pohon;

            $air = [];
            $air['air_sebelum_pblhs'] = $request->air_sebelum_pblhs;
            $air['air_setelah_pblhs'] = $request->air_setelah_pblhs;

            $listrik = [];
            $listrik['listrik_sebelum_pblhs'] = $request->listrik_sebelum_pblhs;
            $listrik['listrik_setelah_pblhs'] = $request->listrik_setelah_pblhs;
            $listrik['luas_ruangan_ac']       = $request->luas_ruangan_ac;
            $listrik['luas_ruangan_non_ac']   = $request->luas_ruangan_non_ac;
            $listrik['jumlah_kader']          = $request->jumlah_kader;


            $profile = Profile::where('user_id',auth()->user()->id)->first();
            $profile->data_jumlah           = json_encode($jumlah);
            $profile->penghematan_air       = json_encode($air);
            $profile->penghematan_listrik   = json_encode($listrik);
            $profile->save();

            logActivity($request, __('Insert',['val' => strtolower(__('Title',['user' => auth()->user()->id]))]));
            return redirect()->back()->with('message', __('Berhasil Update Data'))->with('type', 'success');
        } catch (Exception $e) {
            throw new GeneralException(__('Maaf Terjadi Kesalahan'));
        }

        
    }
}
