<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\vehicle;
use DB;
use Carbon\Carbon;	// formatowanie daty

function formatDate($date)
{
    if ($date == null)
        return $date;
    else
        $fdate =  Carbon::parse($date);
        return $fdate;
}

class VehiclesController extends Controller
{
	public function create(){

        if(auth()->user() != null && auth()->user()->fireStationID != null ){
            $vehicles = DB::table('vehicles')->where("fireStationID", '=', auth()->user()->fireStationID)
                ->whereNull('deleted_at')->paginate(10);
            return view("vehicles", ["vehicles" => $vehicles]);
        } else{
            return view('vehicles');
        }

    }

    public function addForm(){
        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ){ //prezes,naczelnik
                return view('vehiclesAdd');
        } else return redirect()->to('/pojazdy');
    }

    public function editForm($id)
    {
        if(auth()->user() != null && auth()->user()->accessLevel() == 50 ) //prezes,naczelnik
        {

            $vehicle = DB::table('vehicles')->where("id", $id)->first();
                return view('vehiclesEdit', ["vehicle" => $vehicle]);
        }
        else
            redirect()->to('/pojazdy');
    }

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

            'vehicleName' => 'required|max:45',
            'codename' => 'required|max:45',
            'brand' => 'max:45',
            'registrationNumber' => 'max:15',
            'productionYear' => 'digits:4|nullable',
            'driveType' => 'max:45',
            'chassisType' => 'max:45',
            'bodyProducer' => 'max:45',
            'crewNumber' => 'numeric|nullable|digits_between:1,2',
            'foamAgent' => 'numeric|nullable|digits_between:1,10',
            'enginePower' => 'numeric|nullable|digits_between:1,10',
            'mass' => 'numeric|nullable|digits_between:1,10',
            'chassisNumber' => 'max:45',
            'engineNumber' => 'max:45',
            'fuelType' => 'max:45',
            'chassisPoductionYear' => 'digits:4|nullable',
            'fireEnginePumpDescription' => 'max:250',
        ],
            [

                'name' => 'nazwa',
                'required' => ':attribute jest wymagany(e).',
                'numeric' => ':attribute może zawierać tylko cyfry.',
                'digits' => ':attribute musi składać się z :digits cyfr.',
                'max' => ':attribute musi mieć nie więcej niż :max znaków.',
                'digits_between' => ':attribute jest za duży(a)'

            ]);


        $request = request();
        $vehicle = vehicle::create([
            'fireStationID' => auth()->user()->fireStationID,
            'name' => $request-> vehicleName,
            'codename' => $request-> codename,
            'brand' => $request-> brand,
            'registrationNumber' => $request-> registrationNumber,
            'productionYear' => $request-> productionYear,
            'examExpirationDate' => formatDate($request-> examExpirationDate),
            'insuranceExpirationDate' => formatDate($request-> insuranceExpirationDate),
            'driveType' => $request-> driveType,
            'chassisType' => $request-> chassisType,
            'bodyProducer' => $request-> bodyProducer,
            'crewNumber' => $request-> crewNumber,
            'foamAgent' => $request-> foamAgent,
            'enginePower' => $request-> enginePower,
            'mass' => $request-> mass,
            'chassisNumber' => $request-> chassisNumber,
            'engineNumber' => $request-> engineNumber,
            'fuelType' => $request-> fuelType,
            'chassisPoductionYear' => $request-> chassisPoductionYear,
            'entryIntoServiceDate' => formatDate($request-> entryIntoServiceDate),
            'fireEnginePumpDescription' => $request-> fireEnginePumpDescription,
            'status' => $request-> status
        ]);

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


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

            'vehicleName' => 'required|max:45',
            'codename' => 'required|max:45',
            'brand' => 'max:45',
            'registrationNumber' => 'max:15',
            'productionYear' => 'digits:4|nullable',
            'driveType' => 'max:45',
            'chassisType' => 'max:45',
            'bodyProducer' => 'max:45',
            'crewNumber' => 'numeric|nullable|digits_between:1,2',
            'foamAgent' => 'numeric|nullable|digits_between:1,10',
            'enginePower' => 'numeric|nullable|digits_between:1,10',
            'mass' => 'numeric|nullable|digits_between:1,10',
            'chassisNumber' => 'max:45',
            'engineNumber' => 'max:45',
            'fuelType' => 'max:45',
            'chassisPoductionYear' => 'digits:4|nullable',
            'fireEnginePumpDescription' => 'max:250',
        ],
            [

                'name' => 'nazwa',
                'required' => ':attribute jest wymagany(e).',
                'numeric' => ':attribute może zawierać tylko cyfry.',
                'digits' => ':attribute musi składać się z :digits cyfr.',
                'max' => ':attribute musi mieć nie więcej niż :max znaków.',
                'digits_between' => ':attribute jest za duży(a)'

            ]);


            $request = request();
            $vehicle = vehicle::find( $request->vehicleID);
            $vehicle-> name = $request-> vehicleName;
            $vehicle-> codename = $request-> codename;
            $vehicle-> brand = $request-> brand;
            $vehicle-> registrationNumber = $request-> registrationNumber;
            $vehicle-> productionYear = $request-> productionYear;
            $vehicle-> examExpirationDate = formatDate($request-> examExpirationDate);
            $vehicle-> insuranceExpirationDate = formatDate($request-> insuranceExpirationDate);
            $vehicle-> driveType = $request-> driveType;
            $vehicle-> chassisType = $request-> chassisType;
            $vehicle-> bodyProducer = $request-> bodyProducer;
            $vehicle-> crewNumber = $request-> crewNumber;
            $vehicle-> foamAgent = $request-> foamAgent;
            $vehicle-> enginePower = $request-> enginePower;
            $vehicle-> mass = $request-> mass;
            $vehicle-> chassisNumber = $request-> chassisNumber;
            $vehicle-> engineNumber = $request-> engineNumber;
            $vehicle-> fuelType = $request-> fuelType;
            $vehicle-> chassisPoductionYear = $request-> chassisPoductionYear;
            $vehicle-> entryIntoServiceDate = formatDate($request-> entryIntoServiceDate);
            $vehicle-> fireEnginePumpDescription = $request-> fireEnginePumpDescription;
            $vehicle-> status = $request-> status;
            $vehicle->save();

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

    public function destroy($id)
    {
        vehicle::where('id',$id)->delete();
        return response()->json([
            'success' => 'Record deleted successfully!'
        ]);
    }

    public function activate()
    {
        $request = request();
        $vehicle = vehicle::find( $request-> vehicleID);
        $vehicle-> status = 1;
        $vehicle->save();
        return redirect()->to('/pojazdy');
    }

    public function deactivate()
    {
        $request = request();
        $vehicle = vehicle::find( $request-> vehicleID);
        $vehicle-> status = 0;
        $vehicle->save();
        return redirect()->to('/pojazdy');
    }

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

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