<?php
    class Statics{
        public static function SafeInput($con, $input){
            $input = htmlspecialchars($input);
            $input = mysqli_real_escape_string($con, $input);
            return $input;
        }

        public static function fileExists($file){
            if(file_exists($file)){
                unlink($file);
            }
        }

        public static function RedLight(){
            if(isset($_COOKIE)){
                foreach($_COOKIE as $key=>$value){
                    setcookie($key,$value,time() - 3600,'/','','',true);
                }
            }
            session_destroy();
            header('Location:index.php');
        }

        public static function redirectInput($input, $redirect = false){
            if(!isset($input) || empty($input)  ){
                $direc = ($redirect) ? $redirect : 'dashboard.php';
                header('Location:'.$direc);
            }
        }

        public static function getIvaValue ($Schema, $codigo) {
            $sql = "SELECT PORCENTAJE FROM EXPEDIENTES_IMPUESTOS WHERE GRUPO = ? AND CODIGO = ?";
            $res = $Schema->executeQuery($sql, 'si', ['IVA', $codigo]);
            $row_compra_impuesto = $res->fetch_array();
            return $row_compra_impuesto['PORCENTAJE'];
        }

        public static function get_contadores($con, $codigo) {
            $sql = "SELECT PREFIJO,CONTADORSIG,SUFIJO,MASCARA FROM CONTADORES WHERE CODIGO = '$codigo'";
            $res = $con->query($sql);
            $fila = $res->fetch_array();
            $mascara = str_pad($fila['CONTADORSIG'],strlen($fila['MASCARA']),0,STR_PAD_LEFT);
            $contador = $fila['PREFIJO'].$mascara;
            $contsig = $fila['CONTADORSIG'] + 1;
            $sql = "UPDATE CONTADORES SET CONTADORSIG = $contsig WHERE CODIGO = '$codigo'";
            $con->query($sql);
            return $contador;
        }

        public static function max_codigo($con, $tabla) {
            $sqlCOD = "SELECT CODIGO FROM $tabla";
            $resCOD = $con->query($sqlCOD);
            if($resCOD->num_rows){
                $sql = "SELECT MAX(CODIGO) AS MAX_CODIGO FROM $tabla";
                $res = $con->query($sql);
                if($res->num_rows){
                    $fila = $res->fetch_array();
                    $next = $fila['MAX_CODIGO'] + 1;
                    return $next;
                }
            }else {
                if($tabla === 'VEHICULOS'){
                    return 5000001;
                }elseif($tabla === 'CONTACTOS'){
                    return 1000001;
                }
            }
        }

        public static function cambiar_nombre_doc ($con, $name) {
            $sqlName = "SELECT NOMBRE FROM BIBLIOTECA_ELEMENTOS WHERE NOMBRE = ?";
            //$resName = 
            $con->query($sqlName);
            $stmt = $con->prepare($sqlName);
            $stmt->bind_param('s', $name);
            $stmt->execute();
            $res = $stmt->get_result();
            if($res->num_rows > 0){
                $counter = 1;
                $a = explode(".",$name);
                $nameCTRL = $a[0] . "(";
                $sqlName2 = "SELECT COUNT(NOMBRE) AS SUM_CTRL FROM BIBLIOTECA_ELEMENTOS WHERE NOMBRE LIKE '$nameCTRL%'";
                $resName2 = $con->query($sqlName2);
                if($resName2->num_rows > 0){
                    $filaName2 = $resName2->fetch_array();
                    $counter = $counter + intval($filaName2['SUM_CTRL']);
                    $name = $a[0] . "(" . $counter . ")." . end($a);
                }
            }
            return $name;
        }

        public static function rename($extension, $number, $con, $nombre = FALSE) {
            //$con es si se quiere chequear en las BBDD el nombre
            global $archivo_lg;
            $nombre = $nombre ? $nombre : $archivo_lg;
            $sql = "SELECT COUNT(E.NOMBRE) AS N
            FROM BIBLIOTECA_ELEMENTOS E 
            WHERE E.NOMBRE LIKE '$nombre%' 
            GROUP BY E.PADRE";
            $res = $con->query($sql);
            $row = $res->fetch_array();
            $number = $number + $row['N'];
            $archivo = strtoupper($nombre . '_' . $number . '.' . $extension);
            return $archivo; 
        }

        public static function add_trace_history ($con, $usuario, $codigo_vehiculo, $accion, $detalle = NULL, $documento = NULL, $contacto = NULL) {
            date_default_timezone_set('Europe/Madrid');
            $date = date('Y-m-d H:i:s');

            $web = 1;
            $ordenador = gethostname() . "(WEB)";
            $detalle = $detalle ? $detalle : '';
            $documento = $documento ? $documento : '';
            $contacto = $contacto ? $contacto : 0;
            
            $stmt = $con->prepare('SELECT FECHA FROM VEHICULOS_HISTORIAL WHERE VEHICULO = ? AND FECHA = ?');
            $stmt->bind_param('is', $codigo_vehiculo, $date);
            $stmt->execute();
            $res = $stmt->get_result();
            if($res->num_rows > 0) {
                //$fecha = $res->fetch_array(); // Esta variable no se está utilizando
                $date = date('Y-m-d H:i:s', strtotime('+1 seconds'));
            }

            $sql = 'INSERT INTO VEHICULOS_HISTORIAL(VEHICULO, USUARIO, FECHA, ACCION, DETALLE, DOCUMENTO, CONTACTO, WEB, ORDENADOR) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)';
            $stmt = $con->prepare($sql);
            $stmt->bind_param('ississiis', $codigo_vehiculo, $usuario, $date, $accion, $detalle, $documento, $contacto, $web, $ordenador);
            $stmt->execute();
        }

        public static function delete_files ($folder) {
            $files = glob($folder . '*', GLOB_MARK);
            foreach($files as $file) {
                unlink($file);
            }
            rmdir($folder);
        }

        public static function eat_all_files($ruta) {
            $files = glob("$ruta*"); // get all file names
            foreach($files as $file){ // iterate files
                if(is_file($file)){unlink($file);} // delete file
            }
        }

        public static function remove_all_from_folder($dir) {
            try{
                $path = explode('/', $dir);
                $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
                $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
                foreach($files as $file) {
                    if($file->isDir()){
                        $path2 = explode('/', $file->getRealPath());
                        if( end($path) !== end($path2)) {
                            rmdir($file->getRealPath());
                        }
                    } else {
                        unlink($file->getRealPath());
                    }
                }
            } catch (Exception $ex) {
                //return ($ex->getMessage);
                unset($ex);//La ruta no existe cuando trabajamos en devel, por tanto ignoraremos estos errores
            }
        }
        public static function file_name($con, $nombre_archivo) {
            $nombre_archivo = explode('.', $nombre_archivo);
            $res = $con->query('SELECT NOMBRE, COUNT(NOMBRE) AS NR FROM BIBLIOTECA_ELEMENTOS WHERE NOMBRE LIKE "' . $nombre_archivo[0] . '%"');
            $row = $res->fetch_array();
            $nombre_archivo = $nombre_archivo[0];
            $nombre_archivo .= ($row['NR'] > 0) ? '('.$row['NR'].')' : '';
            $nombre_archivo .=  '.'.$nombre_archivo[1];
            return $nombre_archivo;
        }

        public static function tiempoTranscurido($hastaHoy) {
            $alta = strtotime($hastaHoy);
            $hoy = time();
            $dateDiff = $hoy - $alta;
            $parametro = round($dateDiff / (60 * 60 * 24));
            return $parametro;
        }

        public static function getDomain($url) {
            $split = parse_url($url);
            $domain = isset($split['host']) ? $split['host'] : '';
            return (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) ? $regs['domain'] : false;
        }

        public static function get_id_unico() {
            return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) );
        }

        function DateDiff($fecha) {
            $now = time(); 
            $start = strtotime($fecha);
            $datediff = $now - $start;
            return round($datediff / (60 * 60 * 24));
        }


        //Get the similar score between 2 strings
        public static function StringsScore($str1, $str2) {
            similar_text($str1, $str2, $firstScore);//get a first comparation between strings 
            if($firstScore >= 80) {// if is almost a perfect match return this score
                $score = strlen($str1) == strlen($str2) ? 100 : $firstScore;
            } else {
                $new = [];//new array
                $str = preg_replace('/[^a-zA-Z0-9]/', ' ', $str1);//Get rid of non alphanumeric caracters
                $origin = explode(' ', $str);//Convert first string into array to compare, in case string contains more than 1 word
                $str2 = strtoupper($str2);//Convert second string to uppercase
                $str2 = str_replace('NUEVO', '', $str2);//Get rid of this word
                $str2 = preg_replace('/[^a-zA-Z0-9]/', ' ', $str2);//Get rid of non alphanumeric caracters
                $str2 = preg_replace('/\s+/', ' ', $str2);//Remain with only one space between words
                $str2 = $str2 == 'MB' ? 'MERCEDES BENZ' : $str2;//Check if string is mb and change to Mercedes benz
                $explode = explode(' ', $str2);//Convert second string into array to compare
                for($i = 0; $i <= count($explode) - 1; $i++) {
                    for($j = 0; $j <= count($origin) - 1; $j++) {
                        similar_text($explode[$i], $origin[$j], $score);//Get score of words comparation
                        if($score >= 70) {
                            array_push($new, $explode[$i]);//Create a new array for all words that score more than 70%
                        }
                    }
                }
                sort($origin);//Order to increment the score
                sort($new);//Order to increment the score
                similar_text(implode(' ', $origin), implode(' ', $new), $score);//Get the final score
                $score = $score;
            }
            return $score;
        }

        function getClosest($search, $arr) {
            $closest = null;
            foreach ($arr as $item) {
                if ($closest === null || abs($search - $closest) > abs($item - $search)) {
                    $closest = $item;
                }
            }
            return $closest;
        }
    }