<?php

namespace App\Http\Controllers\master;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use DB;
use App\Tempatpenyerahan;
use App\LokasiProduksi;
use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Session;

class TempatPenyerahanController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function __construct(){      
        $this->middleware(function ($request, $next) {
        $url = request()->segment(1);
        $kode_group = Session::get('kode_group');
        $d_menu = DB::table("tb_menu as a")->join("tb_role as b","a.kode_menu","b.kode_menu")->where([['a.link_menu',$url],['b.kode_group',$kode_group],['b.status_role','1'],['a.active','1']])->orderBy('a.sort_menu','asc')->count();
        if(Session::get('decode') <> 1)
         {
            Session::flash('message', 'Silahkan login dengan username dan password anda.!!');
             return redirect()->to('login');
         }
         if($d_menu == 0){
            Session::flush();
            Session::flash('message', 'Anda Tidak Punya Akses ke Halaman ini.!!');
             return redirect()->to('login');
         }
        return $next($request); 
        });
    }

    public function index()
    {
        $data = [];
        return view("master.TempatPenyerahanList", $data);
    }

    public function data_tempat_penyerahan()
    {
        $tempatPenyerahan = Tempatpenyerahan::with(['dataLokasi'])->orderByRaw("id_lokasi, nama")->get();

        return Datatables::of($tempatPenyerahan)
                ->addColumn("nama_lokasi", function($tempatPenyerahan){
                    return $tempatPenyerahan->dataLokasi->nama_lokasi;
                })
                ->addColumn("aksi", function($tempatPenyerahan){
                    $button = "<div class='btn-group'>";
                        $button .= "<a href='".url("tempat_penyerahan/".$tempatPenyerahan->id."/edit")."' class='btn btn-sm btn-success'><i class='fa fa-pencil'></i></a>";
                        $button .= "<button type='button' class='btn btn-sm btn-danger' onclick='btnHapusTempatPenyerahan($(this))'><i class='fa fa-trash'></i></button>";
                    $button .= "</div>";
                    return $button;
                })
                ->make("true");
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $data['method_data'] = "POST";
        $lokasi = LokasiProduksi::get();
        $data['lokasi'] = array_reduce($lokasi->toArray(), function($carry, $item){
            $carry[ $item['id_lokasi'] ] = $item['nama_lokasi'];
            return $carry;
        });
        $data['data'] = $this->data();
        return view("master.TempatPenyerahanForm", $data);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $input = $request->all();
        $dataTempat = [
                "user_id_create"=>1,
                "user_id_update"=>1,
                "id_lokasi"=>$input['id_lokasi'],
                "nama"=>$input['nama'],
                "alamat"=>$input['alamat'],
            ];
        DB::beginTransaction();
        try {
            Tempatpenyerahan::insert($dataTempat);

            DB::commit();
        } catch (Exception $e) {
            DB::rollBack();
        }

        return redirect(url("tempat_penyerahan"));
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Tempatpenyerahan  $tempatpenyerahan
     * @return \Illuminate\Http\Response
     */
    public function show(Tempatpenyerahan $tempatpenyerahan)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Tempatpenyerahan  $tempatpenyerahan
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $data['method_data'] = "PUT";
        $lokasi = LokasiProduksi::get();
        $data['lokasi'] = array_reduce($lokasi->toArray(), function($carry, $item){
            $carry[ $item['id_lokasi'] ] = $item['nama_lokasi'];
            return $carry;
        });
        $tempatPenyerahan = Tempatpenyerahan::find($id);
        $data['data'] = $this->data($tempatPenyerahan);
        return view("master.TempatPenyerahanForm", $data);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Tempatpenyerahan  $tempatpenyerahan
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $input = $request->all();
        $dataTempat = [
                "user_id_update"=>1,
                "id_lokasi"=>$input['id_lokasi'],
                "nama"=>$input['nama'],
                "alamat"=>$input['alamat'],
            ];
        DB::beginTransaction();
        try {
            Tempatpenyerahan::where(['id'=>$id])->update($dataTempat);

            DB::commit();
        } catch (Exception $e) {
            DB::rollBack();
        }
        return redirect(url("tempat_penyerahan"));
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Tempatpenyerahan  $tempatpenyerahan
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        DB::beginTransaction();
        try {
            Tempatpenyerahan::find($id)->delete();

            DB::commit();
        } catch (Exception $e) {
            DB::rollBack();
        }
    }

    public function data($data=[])
    {
        if(sizeof($data) > 0){
            $result['id'] = $data->id;
            $result['id_lokasi'] = $data->id_lokasi;
            $result['nama'] = $data->nama;
            $result['alamat'] = $data->alamat;
        }else{
            $result['id'] = "";
            $result['id_lokasi'] = 1;
            $result['nama'] = "";
            $result['alamat'] = "";
        }

        return $result;
    }
}
