<?php

namespace App\Http\Controllers;
use App\DatesFestius;
use Illuminate\Support\Collection;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Input;
use App\Acces;
use App\CotxeAutoritzat;
use Symfony\Component\HttpKernel\Controller\TraceableControllerResolver;


class NewAccesController extends Controller
{
    /** Inserta rebut de openalpr
     * @param Request $request
     */
    public function postAcces(Request $request)
    {
        $json = $request->input();
        $datos = json_decode(json_encode($json), true);
        //TODO borrar al finalitzat file_put files json to testing
        /*Emagatzema el json dels posts d'openalpr per testing
        //$fh = fopen("/home/oriol/tfg/AjSanllo/public/json/" . $datos["uuid"] . ".json", 'w')
        //or die("Error al abrir fichero de salida");
        //fwrite($fh, json_encode($datos, JSON_UNESCAPED_UNICODE));
        //fclose($fh);*/
            $accesCar = collect([
                'matricula' => $datos["results"][0]["plate"],
                'portal' => $datos["camera_id"],
                'path_imatge' => $datos["uuid"] . ".jpg",
                'confidence' => $datos["results"][0]["confidence"],
                'epoch_time' => $datos["epoch_time"] / 1000,
                'camera_id' => $datos["camera_id"]
            ]);//deividim per 1000 per deixar epoch_time a format correcte per mysql
            $this->accesCar($accesCar);
    }
    /** Valida l'acces i lectura
     * @param $datos
     * @return string
     */
    public function accesCar(Collection $accesCar)
    {
        $Acces = new Acces;
        $CotxeAutoritzat = new CotxeAutoritzat();
        $matricula = $accesCar->get('matricula');
        $accesCar->put('lectura_matricula',$this->validarLecturaMatricula($matricula));
        $accesCar = $this->esFestiu($accesCar);
        //TODO descomentar un cop estigui implementat correctament el metode.
        //$Acces->insertaAccesVehicle($accesCar);//per omplir amb dades de test
        $this->insertaAcces($accesCar);// funcionament normal
    }
    /** Valido matricula
     * @param $matricula
     * @return bool
     */
    public function validarLecturaMatricula($matricula)
    {

        $patro1 = "(^(\d{4})([QWRTYPSDFGHJKLÑZXCVBNM]{3}$))";
        $patro2 = "(^([A-Z]{1,2})(\d{4})([A-Z]{0,2}$))";

        if (preg_match($patro1, $matricula) || preg_match($patro2, $matricula)) {
            return True;
        }
        return False;
    }

    /**Controlo si el dia es autoritat o no
     * @param $data
     * @return bool
     */
    public function esFestiu(Collection $accesCar)
    {

        $CotxeAutoritzat = new CotxeAutoritzat();
        $Datesfestius = new DatesFestius();
        $capSetmana = array("Sat", "Sun");
        if (count($Datesfestius->existeixDataBetwenDates(date('Y/m/d', $accesCar->get('epoch_time')))) > 0 || in_array(date('D', $accesCar->get('epoch_time')), $capSetmana)) {
            $accesCar->put('acces_autoritzat', $CotxeAutoritzat->searchCotxeAutoritzat($accesCar->get('matricula')));

        } else {
            $accesCar->put('acces_autoritzat', True);
        }
        return $accesCar;

    }

    /** Inserta o actualitza l'acces
     * @param Collection $accesCar
     */
    public function insertaAcces(Collection $accesCar)
    {
        $Acces = new Acces;
        $acces = $Acces->orderby('data_acces','DESC')->take(1)->get();
        if(count($acces)>=1){
            $ultimAcces = strtotime($acces[0]->data_acces);
            //busca si ha algun acces igual en els ultims 3 segons
            if(($accesCar->get("epoch_time") - $ultimAcces)<=4 && $accesCar->get('camera_id') == $acces[0]->camera ){
                if($accesCar->get('lectura_matricula')){
                    $Acces->updateVehicle($accesCar, $acces[0]->id);
                }
            }else{
                $Acces->insertaAccesVehicle($accesCar);
            }
        }else{
            $Acces->insertaAccesVehicle($accesCar);
        }
    }

    /** Controla l'existencia d'imatge. Utilitzat en fase test
     * @param $datos
     * @return bool
     */
    public function existeixImatge($datos)
    {
        $nomImatge = $datos["uuid"] . ".jpg";
        //TODO canviar al sortir de test
        //$dir = "/home/oriol/imatges_test/test2_5_16/";
        $dir = "/home/oriol/imatges_test/imatges/";
        $directori = opendir($dir);
        $boolImatge = False;
        while ($archivo = readdir($directori)) //legim fitxer a fitxer
        {
            if (!is_dir($archivo))//verfiquem que sigui un fitxer
            {
                if($archivo == $nomImatge)
                {
                    $boolImatge = True;
                }
            }
        }
        return $boolImatge;
    }
}
