<?php

namespace App\Http\Controllers;


use Illuminate\Http\Request;
use App\User;
use App\fireStation;
use App\Rules\Pesel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Mail;

class fireFightersController extends Controller
{
    public function create(){

        if(auth()->user() != null && auth()->user()->accessLevel() >= 20)   //prezes,naczelnik,sekretarz
        {
//            $users = user::where("fireStationID", auth()->user()->fireStationID)->get();
//            $users = DB::table('users')->where("fireStationID", '=', auth()->user()->fireStationID)->get();
            $users = DB::table('users')->where("fireStationID", '=', auth()->user()->fireStationID)
                    ->leftJoin('ranks', 'users.degreeID', '=', 'ranks.id')
                    ->leftJoin('unitFunctions', 'users.functionID', '=', 'unitFunctions.id')
                    ->select('users.id','users.name', 'users.surname', 'users.PESEL', 'users.email', 'users.statusID', 'ranks.rank', 'unitFunctions.unitFunction')
                    ->paginate(10);
            return view("fireFighters", ["users" => $users]);
        } else {
            return redirect()->to('/userprofile');
        }

    }

    public function addForm(){
        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ){ //prezes,naczelnik
            $fireStation = fireStation::find(auth()->user()->fireStationID);
            if($fireStation-> creatorID == auth()->user()->id){ //if do usunięcia w pzyszłości
                $ranks = DB::table('ranks')->pluck("rank","id");
                $unitFunctions = DB::table('unitFunctions')->pluck("unitFunction","id");
                return view('fireFightersAdd',compact('ranks'), compact('unitFunctions'));
            } else return fireFightersController::create(); // ???
        } else return redirect()->to('/strazacy');
    }

    public function editForm($id){
        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ){ //prezes,naczelnik
            $userFireStation = auth()->user()->fireStationID;
            $fireFighterFireStation = DB::table('users')->where("id", $id)->value('fireStationID');
            $fireStationCreatorId = DB::table('fireStations')->where("id", $userFireStation)->value('creatorID');

            $fireFighter = DB::table('users')->where("id", $id)->first();
            if($userFireStation == $fireFighterFireStation && auth()->user()->id == $fireStationCreatorId) {    // if do usunięcia w pzyszłości
                return view('fireFightersEdit', ["fireFighter" => $fireFighter]);
            } else{
                return "Brak dostepu";
            }
        }else{
            return redirect()->to('/strazacy');
        }
    }

    public function store(){
        $this->validate(request(), [

            'name' =>'required|min:2|max:45|regex:/^[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ\040\x27-]+$/',
            'surname' =>'required|min:2|max:45|regex:/^[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ\040\x27-]+$/',
            'PESEL' => new Pesel,
            'phoneNumber' => 'required|digits:9',
            'email' => 'required|email|unique:users',
            'rank' => 'required',
            'unitFunction' => 'required',
        ],
            [
                'required' => ':attribute jest wymagany(e).',
                'min' => ':attribute musi mieć przynajmniej :min znaki.',
                'max' => ':attribute musi mieć nie więcej niż :max znaków.',
                'regex' => ':attribute może zawierać tylko litery, spacje, myślniki i apostrofy',
                'digits' => ':attribute musi składać się z :digits cyfr.',
                'unique' =>':attribute jest już zajęty.',
                'confirmed' =>':attribute się nie zgadza.',
                'email' => 'Niepoprawny adres e-mail.'
            ]);


        $request = request();
        $confirmation_code = str_random(30);
        $password = str_random(10);

        $user = User::create([
            'password' => $password,
            'email' => $request-> email,
            'name' => $request-> name,
            'surname' => $request-> surname,
            'PESEL' => $request-> PESEL,
            'phoneNumber' => $request-> phoneNumber,
            'functionID' => $request-> unitFunction,
            'degreeID' => $request-> rank,
            'number' => 'ABC123',
            'fireStationID' => auth()->user()->fireStationID,
            'creatorID' => auth()->user()-> id,
            'changingID' => auth()->user()-> id,
            'confirmation_code' => $confirmation_code,
        ]);

        Mail::send('emails.newUserVerification', compact('password', 'confirmation_code'), function($message) {
            $message->to(Input::get('email'), Input::get('name'))->subject('Witamy w serwisie eOSP');
        });

        return fireFightersController::create();
    }

    public function update(){
        $this->validate(request(), [
            'name' =>'required|min:2|max:45|regex:/^[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ\040\x27-]+$/',
            'surname' =>'required|min:2|max:45|regex:/^[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ\040\x27-]+$/',
            'PESEL' => new Pesel,
            'phoneNumber' => 'required|digits:9',
        ],
            [
                'required' => ':attribute jest wymagany(e).',
                'min' => ':attribute musi mieć przynajmniej :min znaki.',
                'max' => ':attribute musi mieć nie więcej niż :max znaków.',
                'regex' => ':attribute może zawierać tylko litery, spacje, myślniki i apostrofy',
                'digits' => ':attribute musi składać się z :digits cyfr.',
                'unique' =>':attribute jest już zajęty.',
                'confirmed' =>':attribute się nie zgadza.',
                'email' => 'Niepoprawny adres e-mail.'
            ]);

        $request = request();
        $fireFighter = User::find( $request->userID);
        $fireFighter-> name = $request->name;
        $fireFighter-> surname = $request->surname;
        $fireFighter-> PESEL = $request->PESEL;
        $fireFighter-> phoneNumber = $request->phoneNumber;
        $fireFighter->save();

        return fireFightersController::create();
    }


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

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

    public function activate()
    {
        $request = request();
        $user = User::find( $request-> userID);
        $user-> statusID = 0;
        $user->save();
        return redirect()->to('/strazacy');
    }

    public function deactivate()
    {
        $request = request();
        $user = User::find( $request-> userID);
        $user-> statusID = 1;
        $user->save();
        return redirect()->to('/strazacy');
    }

}

