<?php

namespace App\Http\Controllers;


use App\User;
use App\operations;
use App\operationsMembers;
use App\vehicle;
use App\operationsDrivers;
use App\operationsTrucks;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;

use Illuminate\Support\Facades\DB;

class operationsController extends Controller
{
    //
    public function create(){
        if(auth()->user() != null && auth()->user()->fireStationID != null ){
            $operations  = DB::table('operations')->where('operations.fireStationID', "=", auth()->user()->fireStationID)
                ->leftJoin('users', 'operations.commanderID', '=', 'users.id')
                ->select('operations.id', 'operations.operationDate', 'operations.location', 'operations.target', 'operations.dangerType', 'operations.description', 'operations.commanderID', 'operations.fireStationID', 'users.name', 'users.surname')
                ->get();

            return view('operation', ["operations" => $operations]);
        } else{
            return view('operation');
        }
    }

    public function addForm(){
        if(auth()->user() != null && auth()->user()->fireStationID != null ){
            $fireFighters = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )->get();
            $vehicles = DB::table('vehicles')->where("fireStationID", '=', auth()->user()->fireStationID)
                ->get();
            return view("operationAdd", ["fireFighters" => $fireFighters], ["vehicles" => $vehicles]);
        } else return view("unit");
    }



    public function editForm($id){
        if(auth()->user() != null && auth()->user()->fireStationID != null ){

//            $fireFighters = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )->get();
            $vehicles = DB::table('vehicles')->where("fireStationID", '=', auth()->user()->fireStationID)
                ->get();
            $operation = DB::table('operations')->where('operations.id', '=', $id)->first();
            $operationMembers = DB::table('operationsMembers')->where('operationID', '=', $id)->get();
//            $operation = DB::table('operations')->where('operations.id', '=', $id)
//                ->leftJoin('users', 'operations.commanderID', '=', 'users.id')
//                ->select('operations.id', 'operations.operationDate', 'operations.location', 'operations.target', 'operations.dangerType', 'operations.description', 'operations.commanderID', 'operations.fireStationID', 'users.id', 'users.name', 'users.surname')
//                ->get();
            $fireFighters = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )
                ->leftJoin('operationsMembers', function ($join) use($id){
                    $join->on('users.id', '=', 'operationsMembers.memberID');
                    $join->where('operationsMembers.operationID', '=', $id);
                })
                ->select('users.*', 'operationsMembers.memberID', 'operationsMembers.privateTransport')
                ->get();
//            if($userFireStation == $fireFighterFireStation && auth()->user()->id == $fireStationCreatorId) {
//            return view('operationEdit', ["operation" => $operation], ["fireFighters" => $fireFighters], ["operationMembers" => $operationMembers] );
            return View::make('/operationEdit')->with(compact('fireFighters','operation', 'operationMembers', 'vehicles'));
//            } else{
//                return "Brak dostepu";
//            }
        } else{
            return view('unit');
        }
    }

    public function store(){
        $this->validate(request(),[
            'operationDate' => 'required',
            'operationLocation' => 'required',
            'operationTarget' => 'required',
            'operationDangerType' => 'required',
            'operationDescription' => 'required',
            'operationLeader' => 'required',
            'operationDriver.*' => 'required',
            'operationVehicle.*' => 'required',
            'attendance.*' => 'required',
            'transport.*' => 'required',
        ],
        [
            'required' => ':attribute jest wymagany(e)'
        ]);

        //
        $request = request();
        $operations = operations::create([
            'operationDate' => $request-> operationDate,
            'location' => $request-> operationLocation,
            'target' => $request-> operationTarget,
            'dangerType' => $request-> operationDangerType,
            'description' => $request-> operationDescription,
            'commanderID' => $request-> operationLeader,
            'fireStationID' => auth()->user()->fireStationID,
        ]);

        // Add trucks
        $operationDriver = $request ->operationDriver;
        $operationVehicle = $request -> operationVehicle;
        for($count = 0; $count < count($operationDriver); $count++){
            $operationsTrucks = operationsTrucks::create([
                'operationID' => $operations->id,
                'truckID' => $operationDriver[$count],
                'driverID' => $operationVehicle[$count]
            ]);
        }



        // Add members
        $attendance = $request-> attendance;
        $transport = $request-> transport;

        // Count of firefighters (need for length of array)
        $fireFightersCount = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )->count();
        for($count = 0; $count < $fireFightersCount; $count++){

            // Check privateTransport checklist
            $privateTransport = 2;
            if(isset($transport[$count])){
                $privateTransport = 1;
            } else{
                $privateTransport = 0;
            }

            if(isset($attendance[$count])){
                $operationsMembers = operationsMembers::create([
                    'operationID' => $operations->id,
                    'memberID' => $attendance[$count],
                    'privateTransport' => $privateTransport,
                ]);
            };
        }

        return operationsController::create();
    }

    public function update(){
        $this->validate(request(),[
            'operationDate' => 'required',
            'operationLocation' => 'required',
            'operationTarget' => 'required',
            'operationDangerType' => 'required',
            'operationDescription' => 'required',
            'operationLeader' => 'required',
            'operationDriver.*' => 'required',
            'operationVehicle.*' => 'required',
            'attendance.*' => 'required',
            'transport.*' => 'required',
        ],
            [
                'required' => ':attribute jest wymagany(e)'
            ]);


        $request = request();
        $operation = operations::where('id', $request->operationID)->update(array(
            'operationDate' => $request-> operationDate,
            'location' => $request-> operationLocation,
            'target' => $request-> operationTarget,
            'dangerType' => $request-> operationDangerType,
            'description' => $request-> operationDescription,
            'commanderID' => $request-> operationLeader,
            'fireStationID' => auth()->user()->fireStationID
        ));


        operationsTrucks::where('operationID', $request->operationID)->delete();

        // Add trucks
        $operationDriver = $request ->operationDriver;
        $operationVehicle = $request -> operationVehicle;
        for($count = 0; $count < count($operationDriver); $count++){
            $operationsTrucks = operationsTrucks::create([
                'operationID' => $request->operationID,
                'truckID' => $operationDriver[$count],
                'driverID' => $operationVehicle[$count]
            ]);
        }

        operationsMembers::where('operationID', $request->operationID)->delete();


        // Add members
        $attendance = $request-> attendance;
        $transport = $request-> transport;

        // Count of firefighters (need for length of array)
        $fireFightersCount = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )->count();
        for($count = 0; $count < $fireFightersCount; $count++){

            // Check privateTransport checklist
            $privateTransport = 2;
            if(isset($transport[$count])){
                $privateTransport = 1;
            } else{
                $privateTransport = 0;
            }

            if(isset($attendance[$count])){
                $operationsMembers = operationsMembers::create([
                    'operationID' => $request->operationID,
                    'memberID' => $attendance[$count],
                    'privateTransport' => $privateTransport,
                ]);
            };
        }

        return operationsController::create();
    }
}