<?php
header('Content-Type: application/json;charset= utf-8');
require("dbinfo.php");
$con = mysqli_connect($sqlname, $username, $password, $db);
if(!$con){exit;}
set_time_limit(15000);
$archivo_ya_cargados = fopen("../sincronizacion/sur_cargados.csv","r+");
$lista_ya_cargados = array();
while (($bufer = fgets($archivo_ya_cargados, 20)) !== false) {
    $problema = intval($bufer);
    if ($problema > 1000)
    {
    array_push($lista_ya_cargados,$problema);
    }
}


$lista_a_procesar = array();
if (($handle = fopen("../sincronizacion/sur.csv", "r")) !== FALSE) {
    while (($data = fgets($handle)) !== FALSE) {
        array_push($lista_a_procesar,$data);
    }
}
fclose($handle);
$lista_a_procesar = array_reverse($lista_a_procesar);


$datos_conexiones_id = array();
$datos_conexiones_padron = array();
$datos_conexiones_puertas = array();
$datos_conexiones_calle = array();
$resultado = mysqli_query($con,"SELECT id, padron, calle, puertas FROM conexiones WHERE activo = 1");
    if (mysqli_num_rows($resultado) > 0){
            while($row = mysqli_fetch_assoc($resultado))
            {
            $val_id = $row["id"];
            $val_padron = $row["padron"];
            $val_puertas = $row["puertas"];
            $val_calle = $row["calle"];
            is_null($val_id) ? $val_id = 0 : $val_id = $val_id;
            is_null($val_padron) ? $val_padron = 0 : $val_padron = $val_padron;
            is_null($val_puertas) ? $val_puertas = 0 : $val_puertas = $val_puertas;
            is_null($val_calle) ? $val_calle = '' : $val_calle = $val_calle;
            $elem = array('id'=>$val_id,'padron'=>$val_padron,'puertas'=>$val_puertas,'calle'=>$val_calle);
            array_push($datos_conexiones_id,$val_id);  
            array_push($datos_conexiones_padron,$val_padron); 
            array_push($datos_conexiones_puertas,$val_puertas); 
            array_push($datos_conexiones_calle,$val_calle);     
        }
}

$total = 0;
$no_encontrados = 0;
$encontrados_padron_puerta = 0;
$encontrados_padron_calle = 0;
$encontrados_padron_1_conexion = 0;
$encontrados_calle_puerta = 0;
$paso = 1000;

foreach ($lista_a_procesar as $elemento)
{
    $elemento = limpiar_texto($elemento);
    $data = explode(",", $elemento);
    if (count($data) == 13) 
    {
        $total++;
        if ($total%$paso == 0)
        {
            echo ("Van procesados " . $total . " registros");
        }
        $problema = $data[0];
        $tipo = $data[1];
        $ubicacion = limpiar_texto($data[2]);
        $municipio = $data[3];
        $ccz = $data[4];
        $prioridad = $data[5];
        $responsable = $data[6];
        $fecha = $data[7];
        $estado = $data[8];
        $fecha_fin = $data[9];
        $reiteraciones = $data[10];
        $expediente = $data[11];
        $atributos = $data[12];
        $renglon = $problema . "," . $tipo  . "," . $ubicacion  . "," . $municipio  . "," . $ccz  . "," . $prioridad  . "," . $responsable  . "," . $fecha . "," . $estado  . "," . $fecha_fin . "," . $reiteraciones . "," . $expediente . "," . $atributos;
        if (!in_array(intval($problema),$lista_ya_cargados))
        {   
            $encontrado_padron = false;    
            $encontrado_puerta = false;
            $encontrado_calle = false;
            $encontrado_solo_calle = false;
            $inicio = strpos($ubicacion,":"); 
            $puerta = ltrim(substr($ubicacion, $inicio + 1, 6));
            $puerta = explode(" " , $puerta);
            $puerta = intval($puerta[0]);
            $nombre_calle = substr($ubicacion, 0, $inicio - 2);
            if (strpos ($ubicacion, "]"))
            {
                $inicio = strpos ($ubicacion, "[Padron");
                $fin = strpos ($ubicacion, "]");
                $padron =  intval(substr($ubicacion, $inicio + 8, $fin - $inicio - 8));
            }
            else
            {
                $fin = strpos ($ubicacion, "Padron");
                $inicio = $fin; 
                $padron =  intval(substr($ubicacion, $inicio + 8));
            }           
           //echo("ubicacion = " . $ubicacion . "\n");
           //echo("padron = " . $padron . "\n");
           //echo("puerta = " . $puerta . "\n");
           //echo("nombre calle = " . $nombre_calle . "\n");
            if ($padron > 0)
            {
                $cant_conexiones = 0;
                for ($i = 0; $i < count($datos_conexiones_id) ; $i++)
                {
                    $idgen = $datos_conexiones_id[$i];
                    $idres_1conex = 0;

                    if (intval($datos_conexiones_padron[$i]) == $padron)
                    { 
                        $idres_1conex = $idgen;
                        $encontrado_padron =  true;
                        $cant_conexiones = $cant_conexiones + 1;  
                       if ($puerta > 99)
                        {
             //               echo("Encontro padron" . "\n");
                            $lista_puertas = json_decode($datos_conexiones_puertas[$i]);
                            if (is_array($lista_puertas))
                            {
                                foreach ($lista_puertas as $j)
                                {
                                    if ($j == $puerta)
                                    {
               //                         echo("Encontro puerta" . "\n");
                                        $encontrado_puerta = true;
                                        $idres = $datos_conexiones_id[$i];
                                        break;
                                    }
                                }
                            }  
                        }    
                        $indice_texto = textos_parecidos($nombre_calle,$datos_conexiones_calle[$i]);
                        //echo("Indice texto " . $indice_texto . " Calle: " . $datos_conexiones_calle[$i] . "\n");
                        if ($encontrado_puerta == false && $indice_texto > 0.9)
                        {
                                    $encontrado_calle = true;
                                    $idres = $datos_conexiones_id[$i];
                        }  
                    }
                }
            }
            if ($encontrado_padron == false || ($encontrado_padron == true && $encontrado_puerta == false && $encontrado_calle == false ))
            {
                    $mejor_puerta = 999999;
                    for ($i = 0; $i < count($datos_conexiones_id) ; $i++)
                    {
                        $idgen = $datos_conexiones_id[$i];
                        $indice_texto = textos_parecidos($nombre_calle,$datos_conexiones_calle[$i]);
                        if ($indice_texto > 0.9)
                            {
                                $lista_puertas = json_decode($datos_conexiones_puertas[$i]);
                                if ($puerta > 99)
                                {
                                    if (is_array($lista_puertas))
                                    {
                                        foreach ($lista_puertas as $j)
                                        {
                                            if($puerta > 99)
                                            {
                                                if($j > 99)
                                                {
                                                    $distancia_puerta = abs($puerta - $j);
                                                    if ($distancia_puerta < $mejor_puerta == $puerta && $distancia_puerta < 10)
                                                    {
                                                        $mejor_puerta = $distancia_puerta;
                                                        $encontrado_solo_calle = true;
                                                        $idres = $datos_conexiones_id[$i];
                                                        if($distancia_puerta == 0)
                                                        {
                                                            break;
                                                        }
                                                    }
                                                }
                                            }    
                                        }
                                    } 
                                }           
                            }
                    }
            }

                $conexion_final = 0;

                //echo ("se busco el padron " . $padron . " y la puerta " . $puerta . " con cant conex= " . $cant_conexiones ."\n");
                if ($encontrado_padron == true && $encontrado_puerta == true)
                {
                    //echo ("Encontrado puerta " .  $ubicacion  . "\n") ;
                    $encontrados_padron_puerta++;
                    $conexion_final = $idres;
                }
                elseif ($encontrado_padron == true && $encontrado_calle == true) 
                {
                    //echo ("Encontrado calle " .  $ubicacion  . "\n") ;
                    $encontrados_padron_calle++;
                    $conexion_final =  $idres;
                }
                elseif ($encontrado_padron == true && $cant_conexiones == 1)
                {
                    //echo ("Encontrado padron " .  $ubicacion  . "\n") ;
                    $encontrados_padron_1_conexion++;
                    $conexion_final =  $idres_1conex;
                }
                elseif ($encontrado_solo_calle == true)
                {
                    //echo ("Encontrado solo calle " .  $ubicacion  . "\n") ;
                    $encontrados_calle_puerta++;
                    $conexion_final =  $idres;
                }
                else
                {
                    $no_encontrados++;
                    //echo ("No encontro - se procesaron " . $total . " y no se encontraron " . $no_encontrados . " - " .  $ubicacion  . "\n");
                }


                if ($conexion_final > 0)
                {
                        $descripcion_historia = "SUR," . preparo_json($renglon);
                        $estado == "Finalizado" ? $fechasur = $fecha_fin : $fechasur = $fecha;
                        $fecha_historia = substr($fechasur, 6,4) . "-" .substr($fechasur, 3,2) . "-" .substr($fechasur, 0,2) . " " .substr($fechasur, 11,2) . "-" .substr($fechasur, 14,2) . "-00";
                        $usuario_historia = "Sistema";

                        $historial = '';
                        $sql1 = "SELECT historial FROM conexiones WHERE id=" . $conexion_final;
                        $resultado1 = mysqli_query($con,$sql1);
                            if (mysqli_num_rows($resultado1) > 0)
                            {
                                $row1 = mysqli_fetch_assoc($resultado1);
                                $historial = $row1["historial"];
                                $historial = preparo_json($historial);
                                $historial_array = json_decode($historial,true);
                                $nuevo_elemento = array('descripcion'=>$descripcion_historia, 'fecha'=>$fecha_historia, 'usuario'=>$usuario_historia);
                                echo ($historial . "\n");
                                //echo (var_dump($historial_array) . "\n");
                                array_push($historial_array,$nuevo_elemento);
                                $historial2 = json_encode($historial_array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
                                $sql2 = "UPDATE conexiones SET historial = '" . $historial2 . "' WHERE id =" . $conexion_final;  
                                //echo ($sql2 . "\n");
                                $resultado2 = mysqli_query($con,$sql2); 
                                $problema_finalizado = $problema .  PHP_EOL;
                                fwrite($archivo_ya_cargados, $problema_finalizado);
                            }
                }

                //echo("Padron:" . $padron . " Puerta:" . $puerta . " Tipo:" . $tipo . " Ccz:" . $ccz . " Prioridad:" . $prioridad . " Responsable:" . $responsable . " Fecha:" . $fecha . " Estado:" . $estado . " Fecha_fin:" . $fecha_fin . " Expediente:" . $expediente . " Atributos:" . $atributos . "\n");
                


    }//si no esta en la lista de no cargados
   

}//si el renglon es valido


}///cada renglon


echo("Padron-puerta: " . $encontrados_padron_puerta . "\n");
echo("Padron-calle: " . $encontrados_padron_calle . "\n");
echo("Padron-1 conexion: " . $encontrados_padron_1_conexion . "\n");
echo("Calle-puerta: " . $encontrados_calle_puerta . "\n");


  fclose($archivo_ya_cargados);
  echo ("Fin - se procesaron " . $total . " y no se encontraron " . $no_encontrados);


function textos_parecidos($a, $b)
  {
      $a = trim($a);
      $b = trim($b);
      if (max(strlen($a), strlen($b)) > 0)
      {
         return 1 - (levenshtein(strtoupper($a), strtoupper($b)) / max(strlen($a), strlen($b)));
      }
      else
      { 
          return 0;
      } 
  }



  function limpiar_texto($string) {
    $res = str_replace('"', '', $string);
    $res = str_replace('º', '', $res);
      return $res;
    }

   function preparo_json($string){ 
    return preg_replace('/[\s]+|[\t]/', ' ', trim($string));
   }
?>



