<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App;
use Auth;
use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\File;

class TapalRouteController extends Controller
{
	protected $childarray=[];
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function getofficedepartment($office_id)
    {
        $deptarr=\App\Department::where('office_id',$office_id)->get();
        return $deptarr->pluck('dept_name', 'id');
    }

    public function getdepartmentsection($departmentid)
    {
        $sectionarr=\App\Section::where('department_id',$departmentid)->get();
        return $sectionarr->pluck('section_name', 'id');
    }

    public function getsectionseat($section_id)
    {
        $seatarr=\App\Seat::where('section_id',$section_id)->get();
        return $seatarr->pluck('seat_name', 'id');
    }

    public function getseatuser($seat_id)
    {
        $name ="";
        $userarr=\App\User_Seat::where('seat_id',$seat_id)->with('user')->first();
        if(isset($userarr))
        {
            $username = $userarr->user->name;
            $email = $userarr->user->email;
            $name = $username."(".$email.")";
        }
        return $name;
    }

    public function show(Request $request)
    {
        $office_id=$request->session()->get('session_office');
        //dd($office_id);
    	// getting username
    	$name=Auth::user()->name;
    	//getting tapal subjects
        $sub=\App\Subject::where('office_id',$office_id)->get();    
        //getting office
        $offz=\App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        $seats =\App\Seat::where('office_id',$office_id)->where('seat_name','!=','Administrator')->get();
        //getting route name   
    	return view('tapalrouting',compact('name','sub','offz','seats','departments'));
    }

    public function routeset(Request $request)
    {
    	$usrid=Auth::user()->id;
        $office_id=$request->session()->get('session_office');
    	$subject_id=$request->input('tapalsubject');
    	$routename=$request->input('routename');

    	//INSERT INTO Troute Table
    	$insert_id=\App\Troute::create([
    		'subject_id'=>$subject_id,
    		'user_id'=>$usrid,
    		'routename'=>$routename,
            'office_id' => $office_id,
    	    ]);
    	$optioncount=$request->optioncount;
    	for($i=1;$i<=$optioncount;$i++)
    	{
	   		$levelval="level".$i;
	   		$officeval="office".$i;
	   		$seatval="seat".$i;
	   		$level=$request->$levelval;
	   		$office=$request->$officeval;
	   		$seat=$request->$seatval;
            //dd($seat);
	   		$option_id=\App\Trouteconf::create([
	   			'troute_id'=>$insert_id->id,
	   			'level'=>$level,
	   			'office_id'=>$office_id,
	   			'seat_id'=>$seat,
	   		]);
    	}
        if($insert_id)
            notify()->success('Route Set!');
        else
           smilify('Error', 'Error Occurred Pls recheck!');
        return redirect()->back();
    }

    public function tableindex(Request $request)
    {
        $office_id=$request->session()->get('session_office');
		$i=0;
		$data=[];
		$troutes=\App\Troute::where('office_id',$office_id)->with('subject')->wherenotnull('subject_id')->get();
		foreach($troutes as $troute)
		{	
			$id=$troute->id;
			$troutename=$troute->routename;
            if(isset($troute->subject_id))
            {
			     $subjectname=$troute->subject->subject;
            }
            else
            {
                $subjectname = "";
            }
			$updated_at=$troute->updated_at->format('d-M-Y');
		    $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->routename = $troutename;
                $obj->subject = $subjectname;
                $obj->updated_at = $updated_at;
                $data[$i] = $obj;
                $i++;
        }
        $routetabledata = collect($data);
        return Datatables::of($routetabledata)
                            ->addColumn('action', function ($routedata) {
                                return '<a href="' . url('showroutetable') . '/' . $routedata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
                            })
                            ->editColumn('id', 'ID: {{$incid}}')
                            ->make(true);
    }
    public function showroutedata(Request $request,$id)
	{
			$troute=\App\Troute::find($id);
			$trouteconf=\App\Trouteconf::where('troute_id',$id)->with('seat')->get();
			foreach($trouteconf as $trout)
			{
   				$level=$trout->level;
   				for($i=1;$i<=$level;$i++)
   				{
   					$seatname=$trout->seat->seat_name;
   					$officeid=$trout->office_id;
   				}
			}
            return view('showroutetable',compact('troute'));
    }
    public function updateroutedata(Request $request)
    {
        $this->validate($request,[
               'subject'=>'required',
                'routename'=>'required']);
        $routename=$request->routename;
        $subject=$reuest->subject;
        $id=$request->trouteid;
        $trout=\App\Troute::findorfail($id);
        $trout->subject=$subject;
        $trout->routename=$routename;
        $troute->save();
        return redirect('tapalroute');
    }

    ///////////////////////////////////////////////////////////////////file Routing

    public function fshow(Request $request)
    {
        $office_id=$request->session()->get('session_office');
    	//getting username
    	$name=Auth::user()->name;
    	//getting file group 
        $file_group=\App\File_Group::where('office_id',$office_id)->get();    
        //getting office
        $offz=\App\Office::where('id',$office_id)->get();
        $departments =\App\Department::where('office_id',$office_id)->get();
        //getting route name   
        $seats =\App\Seat::where('office_id',$office_id)->where('seat_name','!=','Administrator')->get();
    	return view('filerouting',compact('name','file_group','offz','seats','departments'));
        // return view('filerouting');
    }
    //////////////////file route set
    public function frouteset(Request $request)
    {
    	$usrid=Auth::user()->id;
        $office_id=$request->session()->get('session_office');
    	$file_group_id=$request->input('filegroup');
    	$froutename=$request->input('froutename');
    	//INSERT INTO Troute Table
    	$insert_id=\App\Troute::create([
    		'file_group_id'=>$file_group_id,
    		'user_id'=>$usrid,
    		'froutename'=>$froutename,
            'office_id' => $office_id,
    	    ]);
    	$optioncount=$request->optioncount;
    	for($i=1;$i<=$optioncount;$i++)
    	{
    	   		$levelval="level".$i;
    	   		$officeval="office".$i;
    	   		$seatval="seat".$i;
    	   		$level=$request->$levelval;
    	   		$office=$request->$officeval;
    	   		$seat=$request->$seatval;
    	   		$option_id=\App\Trouteconf::create([
    	   			'troute_id'=>$insert_id->id,
    	   			'level'=>$level,
    	   			'office_id'=>$office_id,
    	   			'seat_id'=>$seat,
    	   		]);
    	}
        if($insert_id)
            notify()->success('Route Set!');
        else
           smilify('Error', 'Error Occurred Pls recheck!');
        return redirect()->back();
    }
    public function ftableindex(Request $request)
    {
		$i=0;
		$data=[];
        $office_id=$request->session()->get('session_office');
		$troutes=\App\Troute::where('office_id',$office_id)->with('file_group')->wherenotnull('file_group_id')->get();
		foreach($troutes as $troute)
		{	
            $id=$troute->id;
            if((isset($troute->froutename))&&(isset($troute->file_group)))
            {
                $froutename=$troute->froutename;
                $file_groupname=$troute->file_group->file_group;
                $updated_at=$troute->updated_at->format('d-M-Y');
                $obj = new \stdClass;
                $obj->incid = $i + 1;
                $obj->id = $id;
                $obj->froutename = $froutename;
                $obj->file_group = $file_groupname;
                $obj->updated_at = $updated_at;
                $data[$i] = $obj;
                $i++;
            }
            else
            {
                $troute->froutename= "";
                $file_groupname= "";
            }  
        }
        $froutetable = collect($data);
        return Datatables::of($froutetable)
            ->addColumn('action', function ($routedata) {
                return '<a href="' . url('showfroutetable') . '/' . $routedata->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Show</a>';
            })
            ->editColumn('id', 'ID: {{$incid}}')
            ->make(true);
    }


    public function showfroutedata(Request $request,$id)
    {  
        $froute=\App\Troute::find($id);
        $frouteconf=\App\Trouteconf::where('troute_id',$id)->with('seat')->get();
        foreach($frouteconf as $frout)
        {
            $level=$frout->level;
            for($i=1;$i<=$level;$i++)
            {
                $seatname=$frout->seat->seat_name;
                $officeid=$frout->office_id;
            }
        }
        return view('showfroutetable',compact('froute'));
    }

    public function updatefroutedata(Request $request)
    {
        $this->validate($request,[
               'file_group'=>'required',
                'routename'=>'required']);

        $froutename=$request->froutename;
        //dd($froutename);
        $subject=$reuest->file_group;
        $id=$request->trouteid;
        $trout=\App\Troute::findorfail($id);
        $trout->file_group=$subject;
        $trout->froutename=$froutename;
        $troute->save();
        return redirect('fileroute');
    }
}