<?php

namespace App\Http\Controllers;

use App\equipment;
use App\trainings;
use App\trainingsFirefighters;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Validator;

class trainingsController extends Controller
{
    public function create(){

        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ){ //prezes,naczelnik
            $trainings = DB::table('trainings')->where("fireStationID", '=', auth()->user()->fireStationID)->orWhere("fireStationID", '=', 0)
                ->whereNull('deleted_at')
                ->paginate(10);



            $fireFighters = array();
            $howMuch = array();
            foreach($trainings as $training) {
                $id = $training->id;
                $howMuch[$id] = DB::table('trainingsFirefighters')->where('trainingID', '=', $id)->count();
                $fireFighters[$id] = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID)
                    ->leftJoin('trainingsFirefighters', function ($join) use ($id) {
                        $join->on('users.id', '=', 'trainingsFirefighters.firefighterID');
                        $join->where('trainingsFirefighters.trainingID', '=', $id);
                    })
                    ->select('trainingsFirefighters.*', 'users.name', 'users.surname', 'users.id as userID')
                    ->get();
            }
            return View::make("trainings")->with(compact( "trainings", "fireFighters", "howMuch"));
        } else{
            return redirect()->to('/strazacy');
        }
    }

    public function store(){
        $this->validate(request(), [
            'name' => 'required|max:45',
        ],
            [
                'required' => 'Nazwa jest wymagana.',
                'max' => 'Nazwa musi mieć nie więcej niż :max znaków.',
            ]);


        $request = request();
        $equipment = trainings::create([
            'fireStationID' => auth()->user()->fireStationID,
            'trainingName' => $request-> name,
        ]);

        return redirect()->to('/szkolenia');
    }

    public function addForm(){

    }

    public function addTrainingsFireFighters($id){

        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ){ //prezes,naczelnik
            $fireFighters = DB::table('users')->where("fireStationID", "=", auth()->user()->fireStationID )
                ->leftJoin('trainingsFirefighters', function ($join) use($id){
                    $join->on('users.id', '=', 'trainingsFirefighters.firefighterID');
                    $join->where('trainingsFirefighters.trainingID', '=', $id);
                })
                ->select('trainingsFirefighters.*', 'users.name', 'users.surname', 'users.id as userID')
                ->paginate(10);

            $training = DB::table('trainings')->where("id", '=', $id)
                ->whereNull('deleted_at')->first();
            return View::make("trainingsAddFireFighters")->with(compact( "training", "fireFighters"));
        } else{
            return redirect()->to('/strazacy');
        }
    }

    public function ajaxRequest(Request $request){
        $validator = Validator::make($request->all(), [
            'firefighterID' => 'required',
            'trainingID' => 'required',
            'dateOfComplete' => 'required|date',
            'dateOfExpiry' => 'required|date',
        ],
            [
                'required' => ':attribute jest wymagany(a).',
                'dateOfComplete.required' => 'Data wystawienia szkolenia/badania jest wymagana.',
                'dateOfExpiry.required' => 'Data ważności szkolenia/badania jest wymagana.'
            ]);


        // WALIDACJA
        if ($validator->fails()) {

            if($request->ajax())
            {
                return response()->json(array(
                    'success' => false,
                    'message' => 'There are incorect values in the form!',
                    'errors' => $validator->getMessageBag()->toArray()
                ), 422);
            }

            $this->throwValidationException(

                $request, $validator

            );

        // WYKONANIE ZAPYTAŃ PO POPRAWNEJ WALIDACJI
        } else{

            $trainingFirefighter = trainingsFirefighters::where([
                ['firefighterID', '=', $request->firefighterID],
                ['trainingID', '=', $request-> trainingID]
            ])->first();

            if($trainingFirefighter == null){
                // CREATE
                $trainings = trainingsFirefighters::create([
                    'firefighterID' => $request-> firefighterID,
                    'trainingID' => $request-> trainingID,
                    'dateOfComplete' => $request-> dateOfComplete,
                    'dateOfExpiry' => $request-> dateOfExpiry,
                    'lifetime' => 1,
                ]);
            }else{
                // UPDATE
                $trainingFirefighter->update([
                    'dateOfComplete' => $request-> dateOfComplete,
                    'dateOfExpiry' => $request-> dateOfExpiry,
                ]);
            }

        }



    }

    public function deleteFireFighterTrainings(Request $request){
        $validator = Validator::make($request->all(), [
            'firefighterID' => 'required',
            'trainingID' => 'required',
        ]);

        trainingsFirefighters::where([
            ['fireFighterID', '=', $request->firefighterID],
            ['trainingID', '=', $request->trainingID],
        ])->delete();

    }

    public function update(){

    }

    public function destroy($id)
    {
        trainings::find($id)->delete($id);

        return response()->json([
            'success' => 'Record deleted successfully!'
        ]);
    }

    public function trainingsRename(Request $request){
        $validator = Validator::make($request->all(), [
            'trainingID' => 'required',
            'trainingName' => 'required',
        ]);

        trainings::where('id', '=', $request->trainingID)
            ->update(['trainingName' => $request->trainingName]);
    }

    public function createAllTrainingsPDF(){
        if (auth()->user() != null && auth()->user()->fireStationID != null) {
            $request = request();
            $test = new documentCreators();
            $test->createAllTrainingsPDF($request->fireStationID);
        }
    }

    public function createSingleTrainingPDF(){
        if (auth()->user() != null && auth()->user()->fireStationID != null) {
            $request = request();
            $test = new documentCreators();
            $test->createSingleTrainingPDF($request->trainingID);
        }
    }
}
