<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Storage;
use Carbon\Carbon;
use Illuminate\View\View;
use App\Models\Syarikat;
use App\Models\USerSyarikat;
use App\Models\LesenPenjaja;
use App\Models\Dokumen;
use App\Models\LesenPenjajaDokumen;
use App\Models\JenisPenjaja;

class PenjajaController extends Controller
{
    /**
     * Display the user's profile form.
     */

    public function list(Request $request){
        $user = $request->user();

        $permohonans = LesenPenjaja::where('user_id',$user->id)->get();

        return view('dashboard', ['permohonans' => $permohonans]);

    }

    public function create(Request $request): View
    {
       // $lesen_penjaja = LesenPenjaja::find($request->session()->get('lesen_penjaja_id'));
        $lesen_penjaja = new LesenPenjaja();
        $jenis_penjajas = JenisPenjaja::where('status_data',1)->orderBy('kategori', 'desc')->orderBy('jenis','asc')->get();

        $doc_kad_pengenalan = null;
        $doc_gambar = null;
        $doc_lokasi = null;
        $doc_kebenaran = null;
        $doc_kenderaan = null;
        $doc_kenderaan_geran = null;
        $doc_suntikan_ty2 = null;
        $doc_kursus_makanan = null;


        return view('penjaja.mohon', [
            'user' => $request->user(),
            'permohonan' => $lesen_penjaja,
            'doc_kad_pengenalan' => $doc_kad_pengenalan,
            'doc_gambar' => $doc_gambar,
            'doc_lokasi' => $doc_lokasi,
            'doc_kebenaran' => $doc_kebenaran,
            'doc_kenderaan' => $doc_kenderaan,
            'doc_kenderaan_geran' => $doc_kenderaan_geran,
            'doc_suntikan_ty2' => $doc_suntikan_ty2,
            'doc_kursus_makanan' => $doc_kursus_makanan,
            'jenis_penjajas' => $jenis_penjajas
        ]);
    }

    /**
     * Handle an incoming registration request.
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function store(Request $request): RedirectResponse
    {
  
      /*  $request->validate([
            'nossm' => ['required', 'string', 'max:255'],
            'jenis_perniagaan' => ['required', 'string', 'max:50'],
            'nama_perniagaan' => ['required', 'string', 'max:250'],
            'alamat_perniagaan' => ['required', 'string', 'min:10'],
            'notelefon_perniagaan' => ['required'],
        ]);*/

        $syarikat = Syarikat::firstOrCreate(['nossm'=>$request->nossm],
        [
            'name' => ltrim(rtrim($request->nama_perniagaan)),
            'jenis_perniagaan' => $request->jenis_perniagaan,
            'nossm' => ltrim(rtrim($request->nossm)),
            'alamat' => ltrim(rtrim($request->alamat_perniagaan)),
            'notelefon' => ltrim(rtrim($request->notelefon_perniagaan)),
            'bil_cawangan' => ltrim(rtrim($request->bil_cawangan)),
        ]);

        $user = $request->user();
        $user_syarikat = UserSyarikat::create([
            'user_id' => $user->id,
            'syarikat_id' => $syarikat->id,
            'status' => 'aktif'
        ]);

     /*   switch($request->jenis_penjaja){
            case 'bukan kawasan berpusat': 
            case 'buah bermusim': 
            case 'food truck': 
            case 'foodtruck': 
            case 'car boot sale': 
            case 'sementara': 
            case 'berkenderaan': 
                $grup_laporan = 'penjaja sementara'; break;
            case 'gerai':
            case 'arked': 
            case 'pasar majlis': $grup_laporan = 'penjaja statik'; break;
            case 'berpusat': $grup_laporan = 'penjaja berpusat'; break;
            default: $grup_laporan = 'penjaja sementara'; break;

        }*/
        $grup_laporan = JenisPenjaja::find($request->jenis_penjaja);


        if($request->mohon_id != ''){
            $lesen_penjaja = LesenPenjaja::find($request->mohon_id);
            $lesen_penjaja->user_id =  $user->id;
            $lesen_penjaja->syarikat_id =  $syarikat->id;
            $lesen_penjaja->jenis_penjaja_id =  $request->jenis_penjaja;
            $lesen_penjaja->jenis_lain =  '';
            $lesen_penjaja->status_tanah =  $request->status_tanah;
            $lesen_penjaja->status_lain =  '';
            $lesen_penjaja->kawasan_id =  $request->kawasan;
            $lesen_penjaja->taman_id =  $request->taman;
            $lesen_penjaja->jalan_id =  $request->jalan;
            $lesen_penjaja->penempatan_id =  $request->penempatan;
            $lesen_penjaja->makanan =  $request->makanan;
            $lesen_penjaja->minuman =  $request->minuman;
            $lesen_penjaja->lain =  $request->lain;
            $lesen_penjaja->masa_jualan_mula =  $request->masa_jualan_mula;
            $lesen_penjaja->masa_jualan_tamat =  $request->masa_jualan_tamat;
            $lesen_penjaja->jenis_kenderaan =  $request->jenis_kenderaan;
            $lesen_penjaja->no_pendaftaran =  $request->no_pendaftaran;
            $lesen_penjaja->longitude =  $request->longitude;
            $lesen_penjaja->latitude =  $request->latitude;
            $lesen_penjaja->group_laporan  =  $grup_laporan->kategori;

            $lesen_penjaja->save();
        }
        else{
            $lesen_penjaja = LesenPenjaja::create([
                'user_id' => $user->id,
                'syarikat_id' => $syarikat->id,
                'jenis_penjaja_id' => $request->jenis_penjaja, 
                'jenis_lain' => '', 
                'status_tanah' => $request->status_tanah, 
                'status_lain' => '', 
                'kawasan_id' => $request->kawasan, 
                'taman_id' => $request->taman, 
                'jalan_id' => $request->jalan, 
                'penempatan_id' => $request->penempatan, 
                'makanan' => $request->makanan, 
                'minuman' => $request->minuman, 
                'lain' => $request->lain, 
                'masa_jualan_mula' => $request->masa_jualan_mula, 
                'masa_jualan_tamat' => $request->masa_jualan_tamat, 
                'jenis_kenderaan' => $request->jenis_kenderaan, 
                'no_pendaftaran' => $request->no_pendaftaran, 
                'longitude' => $request->longitude, 
                'latitude' => $request->latitude, 
                'group_laporan' => $grup_laporan->kategori
            ]);
        }
        
        $folder = 'dokumens/penjaja/'.$lesen_penjaja->id.'/';
        $nama_doc = Dokumen::where('jenis', 'lesen_penjaja')->get();
        foreach($nama_doc as $doc){
            if ($request->hasFile($doc->nama)) { //ada upload?

                $validated = $request->validate([
                    $doc->nama => 'file|mimes:jpg,png,pdf', // 2MB max
                ]);
                
                // Store the file
                $path = $request->file($doc->nama);
                $extension = $path->extension(); // Determine the file's extension based on the file's MIME type...
                
                $name = $doc->nama.".".$extension;

                $path->storeAs($folder, $name);

                $lesen_penjaja_dokumen = LesenPenjajaDokumen::updateOrCreate(
                    [   
                        'lesen_penjaja_id' => $lesen_penjaja->id,
                        'dokumen_id' => $doc->id,
                    ],
                    [
                        'lesen_penjaja_id' => $lesen_penjaja->id,
                        'dokumen_id' => $doc->id,
                        'path' => $name,
                        'jenis_dokumen' => $extension,
                    ]);

            }
        }

       // $request->session()->put('lesen_penjaja_id', $lesen_penjaja->id);
        return redirect(route('penjaja-mohon-papar', ['id' => $lesen_penjaja->id]))->with('success', 'Permohonan telah disimpan sebagai draf. Klik butang \'Hantar Permohonan\' untuk teruskan.');
    }

    public function edit_permohonan(Request $request, $id){
        $permohonan = LesenPenjaja::find($id);
        $jenis_penjajas = JenisPenjaja::where('status_data',1)->orderBy('kategori', 'desc')->orderBy('jenis','asc')->get();

        $doc_kad_pengenalan = null;
        $doc_gambar = null;
        $doc_lokasi = null;
        $doc_kebenaran = null;
        $doc_kenderaan = null;
        $doc_kenderaan_geran = null;
        $doc_suntikan_ty2 = null;
        $doc_kursus_makanan = null;
        if(!$permohonan->dokumens->isEmpty()){
            $doc_kad_pengenalan = $permohonan->dokumens->firstWhere('nama', 'doc_kad_pengenalan');
            $doc_gambar = $permohonan->dokumens->firstWhere('nama', 'doc_gambar');
            $doc_lokasi = $permohonan->dokumens->firstWhere('nama', 'doc_lokasi');
            $doc_kebenaran = $permohonan->dokumens->firstWhere('nama', 'doc_kebenaran');
            $doc_kenderaan = $permohonan->dokumens->firstWhere('nama', 'doc_kenderaan');
            $doc_kenderaan_geran = $permohonan->dokumens->firstWhere('nama', 'doc_kenderaan_geran');
            $doc_suntikan_ty2 = $permohonan->dokumens->firstWhere('nama', 'doc_suntikan_ty2');
            $doc_kursus_makanan = $permohonan->dokumens->firstWhere('nama', 'doc_kursus_makanan');
        }

        if(!is_null($permohonan)){
            Gate::authorize('edit-sendiri', $permohonan);

            return view('penjaja.mohon', [
            'user' => $request->user(),
            'permohonan' => $permohonan,
            'doc_kad_pengenalan' => $doc_kad_pengenalan,
            'doc_gambar' => $doc_gambar,
            'doc_lokasi' => $doc_lokasi,
            'doc_kebenaran' => $doc_kebenaran,
            'doc_kenderaan' => $doc_kenderaan,
            'doc_kenderaan_geran' => $doc_kenderaan_geran,
            'doc_suntikan_ty2' => $doc_suntikan_ty2,
            'doc_kursus_makanan' => $doc_kursus_makanan,
            'jenis_penjajas' => $jenis_penjajas
            ]);
        }
        else{
            return redirect(route('dashboard', absolute: false))->with('error', 'Permohonan tidak dijumpai');
        }
    }

    public function hapus_permohonan($id){
        $permohonan = LesenPenjaja::find($id);
        Gate::authorize('hapus-sendiri', $permohonan);


        $permohonan->delete();
        

        return redirect(route('dashboard', absolute: false));

    }

    public function hantar_permohonan(Request $request){
        $permohonan = LesenPenjaja::find($request->session()->get('lesen_penjaja_id'));

        if(!is_null($permohonan)){
            Gate::authorize('edit-sendiri', $permohonan);
        
            $permohonan->status_progress = 'baru';
            $permohonan->tarikhmohon = Carbon::now();
            $permohonan->save();
            
            return redirect(route('dashboard', absolute: false))->with('success', 'Permohonan berjaya dihantar.');
        }
        else{
            return redirect(route('dashboard', absolute: false))->with('error', 'Permohonan tidak dijumpai');
        }

    }

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

        $permohonan = LesenPenjaja::find($id);
        if($permohonan->status_progress == 'draf'){
            $action = 'penjaja-mohon-hantar';
        }
        else{
            $action = 'dashboard';
        }

        
        $request->session()->put('lesen_penjaja_id', $permohonan->id);

        $doc_kad_pengenalan = null;
        $doc_gambar = null;
        $doc_lokasi = null;
        $doc_kebenaran = null;
        $doc_kenderaan = null;
        $doc_kenderaan_geran = null;
        $doc_suntikan_ty2 = null;
        $doc_kursus_makanan = null;
        if(!$permohonan->dokumens->isEmpty()){
            $doc_kad_pengenalan = $permohonan->dokumens->firstWhere('nama', 'doc_kad_pengenalan');
            $doc_gambar = $permohonan->dokumens->firstWhere('nama', 'doc_gambar');
            $doc_lokasi = $permohonan->dokumens->firstWhere('nama', 'doc_lokasi');
            $doc_kebenaran = $permohonan->dokumens->firstWhere('nama', 'doc_kebenaran');
            $doc_kenderaan = $permohonan->dokumens->firstWhere('nama', 'doc_kenderaan');
            $doc_kenderaan_geran = $permohonan->dokumens->firstWhere('nama', 'doc_kenderaan_geran');
            $doc_suntikan_ty2 = $permohonan->dokumens->firstWhere('nama', 'doc_suntikan_ty2');
            $doc_kursus_makanan = $permohonan->dokumens->firstWhere('nama', 'doc_kursus_makanan');
        }

        if(!is_null($permohonan)){
            Gate::authorize('edit-sendiri', $permohonan);

            return view('penjaja.mohon_papar', [
            'user' => $request->user(),
            'permohonan' => $permohonan,
            'doc_kad_pengenalan' => $doc_kad_pengenalan,
            'doc_gambar' => $doc_gambar,
            'doc_lokasi' => $doc_lokasi,
            'doc_kebenaran' => $doc_kebenaran,
            'doc_kenderaan' => $doc_kenderaan,
            'doc_kenderaan_geran' => $doc_kenderaan_geran,
            'doc_suntikan_ty2' => $doc_suntikan_ty2,
            'doc_kursus_makanan' => $doc_kursus_makanan,
            'action' => $action
            ]);
        }
        else{
            return redirect(route('dashboard', absolute: false))->with('error', 'Permohonan tidak dijumpai');
        }
    }

  /*  public function showDokumen($id, $filename)
    {
        $permohonan = LesenPenjaja::find($id);
        Gate::authorize('edit-sendiri', $permohonan);
        $path = 'dokumens/penjaja/'.$id.'/'.$filename;

        if (!Storage::exists($path)) {
            abort(404);
        }

        return response()->file(storage_path('app/' . $path));
    }*/

    public function stream($id, $filename)
    {
        $permohonan = LesenPenjaja::find($id);
        Gate::authorize('sendiri-or-staff', $permohonan);

        $path = 'dokumens/penjaja/'.$id.'/'.$filename;
        if (!Storage::exists($path)) abort(404);
        return response()->file(storage_path('app/' . $path));
    }
}
