<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class LoginModels extends CI_Model
{
    function __construct()
    {
        parent::__construct();
        $this->Tabla = "usuarios";
        if ( DbMultiple === TRUE){
       if (existDb(DbHost,DbUser,DbPass,'usercontrol')  && DbMultiple === TRUE){
        $this->db = $this->load->database(configDB(DbHost,DbUser,DbPass,'usercontrol'), TRUE);
        $this->Tabla = "user";
       }}
    }
   // private $Tabla = "usuarios";
    private $Delimitador= "|";
    private $Separador = "^";
    private function Filtros($Filtros){
        $Filtros= str_replace('ø','/',$Filtros);
        $arr1 = explode($this->Delimitador,$Filtros);
        $array_num = count($arr1);
        for ($i = 0; $i < $array_num; ++$i){
           
            $posicion_coincidencia = strpos($arr1[$i], $this->Separador);
            if(  $posicion_coincidencia != FALSE ){
              $Array2 = explode($this->Separador,$arr1[$i]);
              $Array2[0]= $this->columna($Array2[0]);
              $arr1[$i] =  $Array2;
            }else {
                $arr1[$i]= array("Todo", $arr1[$i]);
            }
        }
        return  $arr1;
    }

   
    private  function columna($id = null,$Mascara = false){
        $fields = $this->db->list_fields($this->Tabla);
        if($id === null){
          
            $array_num = count($fields);
            for ($i = 0; $i < $array_num; ++$i){
                $fields[$i] =  $fields[$i]. " AS ". $this->Mascara($fields[$i]);
            }
            return $fields;

        }

        if(is_numeric($id)===false){
            $array_num = count($fields);
            for ($i = 0; $i < $array_num; ++$i){
                if($id === $fields[$i] ||  $this->Mascara($fields[$i]) === $id ){
                    if($Mascara=== false){
                        return $fields[$i];
                    }else{
                        return $fields[$i]. " AS ". $this->Mascara($fields[$i]);
                    }
                  
                }
              
            }
            return $fields[0];
        }else{

       

        if($Mascara === false){
            if(intval($id) < count($fields) && intval($id) > 0 ){
                return  $fields[intval($id)];
              }else{
                return $fields[0];
              }
        }else{
            if(intval($id) < count($fields) && intval($id) > 0 ){
                return  $fields[intval($id)]. " AS ". $this->Mascara($fields[intval($id)]);
              }else{
                return $fields[0]. " AS ". $this->Mascara($fields[0]);
              }        
        }
    }
       
    }
    private function Columnas($col = null,$Mascara = false){
          if($col=== null){
           $Arra =  $this->columna(null);
           return $Arra;
          }

        $Colu = substr($col, 1);
        $posicion_coincidencia = strpos($Colu, $this->Delimitador);
        if(  $posicion_coincidencia === FALSE ){
            $arr1 = str_split($Colu);
        }else{
            $arr1 = explode($this->Delimitador,$Colu);
        }
     
        $array_num = count($arr1);
        for ($i = 0; $i < $array_num; ++$i){
            $arr1[$i] =  $this->columna($arr1[$i],$Mascara);
        }
        return $arr1;
    }
    public function getUser($id=NULL)
    {
       //Cierre de secion 
       
    }

    
  
    

   
   

    Public function MetaData($Mascara = true){
      
        $meta = $this->db->field_data($this->Tabla);
    
        $meta2 =array();
        $i=0;
        foreach ($meta as $field)
{ 
    if($Mascara=== true){
        $meta2[$i] = ["nombre"=> $this->Mascara($field->name), "len"=> $field->max_length, "type"=> $field->type,"Obligatorio"=>false, "ID"=>$i];
        
    }else{
        $meta2[$i] = ["nombre"=> $field->name, "len"=> $field->max_length, "type"=> $field->type, "Obligatorio"=>false,"ID"=>$i];
    }
    if($field->name =="Rut" || $field->name =="Cd_Tienda" || $field->name =="Login" || $field->name =="Password"  ){
        $meta2[$i]["Obligatorio"]= true;
    }
    
    

    
    $i++;
}

       return   $meta2;
    } 
    private function Mascara($Clave){
$ArrayUser["Codigo"]=  utf8_encode('Código');
$ArrayUser["Nombres"]= "Nombre";
$ArrayUser["Apellidos"]="Apellido";
$ArrayUser["Telefono"]= utf8_encode('Teléfono');
$ArrayUser["Fecha_in"]="Ingreso" ;
$ArrayUser["FechaNa"]= "Nacimiento";
$ArrayUser["Fecha_Egreso"]="Egreso";
$ArrayUser["Cd_Tienda"]="Tienda" ;
if (isset($ArrayUser[$Clave])){
return $ArrayUser[$Clave];
}else{
return $Clave;
}
}
private function verificarExistencia($dato,$Array)
{
    $array_num = count($Array);

    for ($id = 0; $id < $array_num; ++$id){
        if($Array[$id]["nombre"] == $dato){
          return $id;
        }
    }
    return false;
}
private function validar($Datos){
$meta = $this->MetaData(false);

$ArrayDatos = array();
while (current($Datos)!==false) {
    $verificar = current($Datos);
    
    if(is_numeric(key($Datos))===false){
        $clave=  $this->verificarExistencia(key($Datos),$meta);
        if ($clave=== false){
            return false;
        }
    }else{
        $clave = intval(key($Datos));
    }
    
    if (!isset($meta[$clave])){
        end($Datos);
        return false;
    }else{
    if (intval($meta[$clave]["len"]) < strlen($verificar) && $meta[$clave]["len"]!= null ){
        end($Datos);
        return false;
    } 

    }
    $ArrayDatos[$meta[$clave]["nombre"]] = $verificar;

      next($Datos);
      }
      return $ArrayDatos;     
}
public function Login($datos){
 
    $ArrayDatos= $this->validar($datos);

    if (!isset($ArrayDatos["Login"])){
        return array("Error"=>"Debe Enviar Campo Login");
    }
    if (!isset($ArrayDatos["Password"])){
        return array("Error"=>"Debe Enviar Campo Password");
    }
    if(DbMultiple === TRUE){
        $this->db->select(array("Password","Codigo","ID"));
    }else{
        $this->db->select(array("Password","Codigo"));
    }
    
   $Datos =  $this->db->get_where($this->Tabla,array("Status"=>"Activo", "Login"=> $ArrayDatos["Login"]))->result();
   if(count($Datos)===0){
    
    return array(false);
   }
   // como si existen datos vamos a recorrer todos los usuarios con el mismo login
   // y vamos a comparar los password si uno conincide lo logueamos
   $Codigo = array(false);
   for($i =0; $i < count($Datos); $i++ ){
    if(password_verify($ArrayDatos["Password"],$Datos[$i]->Password) === true){
        if (DbMultiple === TRUE){
            $Codigo = array($Datos[$i]->Codigo,$Datos[$i]->ID);
        }else{
            $Codigo = array($Datos[$i]->Codigo);
        }
        
        break;
    } 
   }
   return $Codigo;
 
}


private function FormatoRut($Rut){
    $newRut = str_replace(".", "", $Rut);
    $newRut = str_replace("-", "", $newRut);
    $Ultimo = substr($newRut, -1);
    $rest = substr($newRut, 0, -1);
   
    return $rest."-".$Ultimo;
   }

}
