<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Sancio;

class Acces extends Model{
    protected $table = 'registre_acces';
    //per desactivar camps a la taula update at i created at
    public $timestamps = false;
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    /** Insertar acces
     * @param Collection $accesCar
     */
    public function insertaAccesVehicle(Collection $accesCar)
    {
        $this->matricula = $accesCar->get('matricula');
        $this->portal = $accesCar->get('portal');
        $this->acces_autoritzat = $accesCar->get('acces_autoritzat');
        $this->path_imatge = $accesCar->get('path_imatge');
        $this->confidence = $accesCar->get('confidence');
        $this->lectura_matricula = $accesCar->get('lectura_matricula');
        $this->data_acces = date('Y/m/d H:i:s', $accesCar->get('epoch_time'));//converteixo a format de data correcte i guardo
        $this->camera = $accesCar->get('camera_id');
        $this->save();
    }
    /** Actualitzar la lectura de matricula com erronia o no
     * @param $idAcces
     * @param $matricula
     * @param $lecturaMatricula
     * @param $autoritzacio
     */
    public function updateErrorLecturaMatricula($idAcces, $matricula, $lecturaMatricula, $autoritzacio)
    {
        $this->where('id', $idAcces)->update(['matricula' => $matricula,
            'lectura_matricula' => $lecturaMatricula,
            'acces_autoritzat' => $autoritzacio,
            'confidence' => '100']);
    }

    /** Actualitzar acces segons id
     * @param Collection $accesCar
     * @param $id
     */
    public function updateVehicle(Collection $accesCar, $id)
    {
        $this->where('id', $id)->update([
            'matricula' => $accesCar->get('matricula'),
            'acces_autoritzat' => $accesCar->get('acces_autoritzat'),
            'path_imatge' => $accesCar->get('path_imatge'),
            'lectura_matricula' => $accesCar->get('lectura_matricula'),
            'confidence' => $accesCar->get('confidence')]);
    }

    /** Varia l'estat de lectura de matricula per idAcces
     * @param $idAcces
     * @param $lecturaMatricula
     */
    public function canviLecturaMatricula($idAcces, $lecturaMatricula)
    {
        $this->where('id', $idAcces)->update(['lectura_matricula' => $lecturaMatricula]);
    }

    /** Autoritza o desautoritzo l'acces per idAcces
     * @param $idAcces
     * @param $boolAccesAutoritzat
     */
    public function autoritzarAcces($idAcces, $boolAccesAutoritzat)
    {
        $this->where('id', $idAcces)->update(['acces_autoritzat' => $boolAccesAutoritzat]);
    }
    /** Marco acces com a sancionat
     * @param $idAcces
     * @param $boolAccesAutoritzat
     */
    public function marcarSancioAcces($idAcces, $bool)
    {
        $this->where('id', $idAcces)->update(['sancionat' => $bool]);
        return $this->where('id', $idAcces)->get();
    }

    /** Llista els accesos per portal
     * @param $portal
     * @return mixed
     */
    public function getAccesVehiclePortal($portal){
        return $this->where('portal', $portal)->get();
    }

    /** Llista els accesos segons la matricula
     * @param $matricula
     * @return mixed
     */
    public function getAccesVehicleMatricula($matricula){
        return $this->where('matricula', $matricula)->orderBy('data_acces', 'asc');
    }

    /** Llista tots els vehicles infractors que no estan sancionats
     * @return mixed
     */
    public function getAccesVehicleInfractor(){
        $sancio = new Sancio;
        $id = $sancio->id_acce;
        //return $id;
        return $this->where('acces_autoritzat', False)->where('lectura_matricula',True)->where('sancionat',0)->orderBy('data_acces', 'desc');
        //return $this->where('acces_autoritzat', False)->where('lectura_matricula',True)->where('borrat',0)->orderBy('data_acces', 'desc');
    }

    /** Llista els vehicles infractors entre 2 dates
     * @param $boolAccesAutoritzat
     * @param $data1
     * @param $data2
     * @return mixed
     */
    public function getAccesVehicleInfractorsBetwenDates($boolAccesAutoritzat, $data1, $data2){
        return $this->where('acces_autoritzat', $boolAccesAutoritzat)->whereBetween('data_acces',[$data1,$data2])->get();
    }
    /** Llista els accessos segons si la lectura de matricula es TRUE o FALSE
     * @param $lecturaMatricula
     * @return mixed
     */
    public function getAccesLecturaMatricula($lecturaMatricula){
        return $this->where('lectura_matricula', $lecturaMatricula)->orderBy('data_acces', 'desc');
    }
    /** LLista l'acces segons el seu ID
     * @param $dataAcces
     * @return mixed
     */
    public function getAccesId($AccesId){
            //comprobar format hora
        return $this->where('id', $AccesId)->get();
    }

    /** Llista tots els accessos
     * @return mixed
     */
    public function getAcces(){
        //comprobar format hora
        return $this->orderBy('data_acces', 'desc');
        //llista errors borrats, no utilitzat
        //return $this->where('borrat',0)->orderBy('data_acces', 'desc');
    }
    /** Borrar acces segons id. Borrat logic, no real
     * @param $id
     */
    public function borrarAcces($id){
        $this->where('id', $id)->delete();
    }
}
