<?php
require_once("../Connection.php");

class Nomina10001 extends Connection
{
   // private $response;
   // function __construct() {
   //    $this->response = $this->DefaultResponse();
   // }

   function Index($ejercicio) {
      $response = $this->DefaultResponse();

      try {
         $query = "SELECT top 100 codigoempleado, nombre, apellidopaterno, apellidomaterno, UPPER(CONCAT(rfc,CONVERT(varchar,fechanacimiento,12),homoclave)) AS rfc, fechaalta
         FROM nom10001
         WHERE estadoempleado IN ('A','R')";
         // AND CONVERT(char(4), DATEPART (Year, fechaalta)) = '$ejercicio';";
         $result = $this->Select($query,true);
         $response = $this->CorrectResponse();
         $response["message"] = "Peticion satisfactoria | registros encontrados.";
         $response["data"] = $result;
         $this->Close();

      } catch (Exception $e) {
         $this->Close();
         $mensaje_error = "Error: ".$e->getMessage();
         $response = $this->CatchResponse($mensaje_error);
      }
      die(json_encode($response));
   }

   function SyncInfo() {
      $response = $this->DefaultResponse();

      try {
         // $query = "INSERT INTO USR_Compaq(codigoEmpleado, nombreE, apellidoP, apellidoM, Rfc, fechaAlta) VALUES(?,?,?,?,?,?);";
         $query = "SELECT * FROM Afores;";
         $result = $this->Select($query,true);
         $response = $this->CorrectResponse();
         $response["message"] = "Peticion satisfactoria | registros encontrados.";
         $response["data"] = $result;
         $this->Close();

      } catch (Exception $e) {
         $this->Close();
         $mensaje_error = "Error: ".$e->getMessage();
         $response = $this->CatchResponse($mensaje_error);
      }
      die(json_encode($response));
   }






   
   #region SECCION DE 
   function iniciarSesion($correo,$contrasenia) {
     $respuesta = $this->respuestaDefault();

      try {
         $query = "SELECT u.id, u.usuario, u.correo, u.contrasenia, u.perfil_id, u.reporte_id_default
         FROM usuarios as u WHERE u.correo='$correo' AND u.activo=1 LIMIT 1";
         $usuario_encontrado = $this->SelectOneAndContinue($query);

         if (sizeof($usuario_encontrado) > 0) {
            if (password_verify($contrasenia, $usuario_encontrado["contrasenia"])) {

               $this->establecerCookies($usuario_encontrado["id"]);

               $respuesta = array(
                  "Resultado" => true,
                  "Icono_alerta" => 'success',
                  "Titulo_alerta" => 'Welcome!',
                  "Texto_alerta" => "$usuario_encontrado[usuario]",
                  "Rol" => "$usuario_encontrado[perfil_id]",
               );
            } else {
               $respuesta = array(
                  "Resultado" => false,
                  "Icono_alerta" => 'error',
                  "Titulo_alerta" => 'Opps...!',
                  "Texto_alerta" => 'Incorrect credentials, please verify your info.',
                  // "Texto_alerta" => 'Credenciales incorrectas, verifica tus datos.',
               );
            }
         }
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function cerrarSesion() {
      $this->eliminarCookies();

      $respuesta = array(
         "Resultado" => true,
         "Icono_alerta" => 'success',
         "Titulo_alerta" => 'Logout...',
         "Texto_alerta" => '',
      );
      die(json_encode($respuesta));
   }

   function establecerCookies($id) {
      try {
         $query = "SELECT u.id, u.usuario, u.correo, u.contrasenia, u.perfil_id, u.reporte_id_default, u.tema_oscuro
         FROM usuarios as u WHERE u.id=$id";

         $usuario_encontrado = $this->SelectOneAndContinue($query);

         if (sizeof($usuario_encontrado) > 0) {
            $tiempo_coockies = '+30 days';
            // if ($usuario_encontrado["perfil_id"] == 1)
            //   $tiempo_coockies = '+1 day';

            setcookie("dpnstash_id_usuario",$usuario_encontrado["id"], strtotime($tiempo_coockies), "/");
            setcookie("dpnstash_usuario",$usuario_encontrado["usuario"], strtotime($tiempo_coockies), "/");
            setcookie("dpnstash_perfil_id",$usuario_encontrado["perfil_id"], strtotime($tiempo_coockies), "/");
            setcookie("dpnstash_reporte_id_default",$usuario_encontrado["reporte_id_default"], strtotime($tiempo_coockies), "/");
            setcookie("dpnstash_sesion","activa", strtotime($tiempo_coockies), "/");
            setcookie("dpnstash_tema_oscuro",$usuario_encontrado["tema_oscuro"], strtotime($tiempo_coockies), "/");

            $query_permisos = "SELECT permisos_lectura,permisos_altas,permisos_bajas,permisos_cambios,permisos_especiales FROM perfiles WHERE id_perfil=$usuario_encontrado[perfil_id]";
            $menus = "SELECT * FROM menus WHERE habilitado=1";
            $permisos = $this->SelectOnlyOne($query_permisos);
            if (sizeof($usuario_encontrado) > 0) {
               setcookie("dpnstash_permisos_lectura",$permisos["permisos_lectura"], strtotime($tiempo_coockies), "/");
               setcookie("dpnstash_permisos_altas",$permisos["permisos_altas"], strtotime($tiempo_coockies), "/");
               setcookie("dpnstash_permisos_bajas",$permisos["permisos_bajas"], strtotime($tiempo_coockies), "/");
               setcookie("dpnstash_permisos_cambios",$permisos["permisos_cambios"], strtotime($tiempo_coockies), "/");
               setcookie("dpnstash_permisos_especiales",$permisos["permisos_especiales"], strtotime($tiempo_coockies), "/");
            }
         }
      } catch (Exception $e) {
         error_log("Error: ".$e->getMessage());
      }
   }
   function eliminarCookies() {
      if (isset($_COOKIE)) {
         // $this->id = strpos($_COOKIE, 'id_usuario');
         foreach ($_COOKIE as $name=>$value) {
            unset($_COOKIE[$name]);
            setcookie($name, null, -1, "/");
         }
      }
   }
   #endregion SECCION DE LOGIN


   function mostrarUsuarios() {
      try {
         $respuesta = $this->respuestaDefault();

         $query = "SELECT u.id, u.usuario, u.correo, p.id_perfil as perfil_id, p.perfil as perfil_nombre, u.creado
         FROM usuarios as u INNER JOIN perfiles as p ON p.id_perfil=u.perfil_id WHERE u.activo=1 ORDER BY u.id ASC";

         $resultado = $this->Select($query);
         if (sizeof($resultado) > 0) {
            $respuesta = array(
               "Resultado" => true,
               "Datos" => $resultado
            );
         } else {
            $respuesta = array(
               "Resultado" => true,
               "Mensaje" => 'No registers.',
               "Datos" => array()
            );
         }
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   // ----------------------------------------------------
   function mostrarEmpleados() {
      try {
         $respuesta = $this->respuestaDefault();

         $query = "SELECT u.id, u.usuario, u.correo, p.id_perfil as perfil_id, p.perfil as perfil_nombre, u.creado FROM usuarios as u INNER JOIN perfiles as p ON p.id_perfil=u.perfil_id WHERE u.activo=1 and p.id_perfil = 4 ORDER BY u.id ASC";

         $resultado = $this->Select($query);
         if (sizeof($resultado) > 0) {
            $respuesta = array(
               "Resultado" => true,
               "Datos" => $resultado
            );
         } else {
            $respuesta = array(
               "Resultado" => true,
               "Mensaje" => 'No registers.',
               "Datos" => array()
            );
         }
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }
   // ----------------------------------------------------JP

   function mostrarUsuario($id_usuario) {
      try {
        $respuesta = $this->respuestaDefault();

         $query = "SELECT u.id, u.usuario, u.correo, p.id_perfil as perfil_id, p.perfil as perfil_nombre, u.creado
         FROM usuarios as u INNER JOIN perfiles as p ON p.id_perfil=u.perfil_id WHERE id=$id_usuario";
         $consulta = $this->SelectOnlyOne($query);
         if (sizeof($consulta) > 0) {
            $respuesta = array(
               "Resultado" => true,
               "Icono_alerta" => 'success',
               "Titulo_alerta" => 'SUCCESS',
               "Texto_alerta" => 'User found.',
               "Datos" => $consulta
            );
         }

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function crearUsuario($usuario,$correo,$contrasenia,$perfil_id,$creado, $objeto) {
      try {
         $respuesta = $this->respuestaDefault();

         $duplicado = $this->verificarDatoDisponible('usuario',$usuario,'Username',$usuario);
         if ($duplicado["Resultado"] == true) die(json_encode($duplicado));

         $duplicado = $this->verificarDatoDisponible('correo',$correo,'E-mail',$correo);
         if ($duplicado["Resultado"] == true) die(json_encode($duplicado));


         $contrasenia_hash = password_hash($contrasenia,PASSWORD_DEFAULT);
         $query = "INSERT INTO usuarios (usuario,correo,contrasenia,perfil_id,creado) VALUES (?,?,?,?,?)";
         $this->ExecuteQueryAndContinue($query, array($usuario,$correo,$contrasenia_hash,$perfil_id,$creado));
         $id_insertado = (int)$this->ObtenerIdInsertado();
         $objeto->_usuario_id = $id_insertado;
         // VINCULAR EL USUARIO A LA TABLA USUARIOS
         // $this->vincularUsuario($id_insertado);

         if ($perfil_id == 3) { // CONSULTOR
            // include ("../Consultor/Consultor.php");
            // $Consultor = new Consultor();
            // $Consultor->vincularUsuarioConsultor($id_insertado);
            // $query = "CALL SP_VincularConsultor(
            //    $objeto->_usuario_id,
            //    $objeto->_paquete_id,
            //    $objeto->_fecha_pago,
            //    $objeto->_pagado
            // )";
            $query = "CALL SP_VincularConsultor($id_insertado)";
            $this->Procedure($query);

         }
         else if ($perfil_id == 4) { // SUSCRIPTOR
            // $consultor_id = null;
            // if ($_COOKIE["dpnstash_perfil_id"] == "2") $consultor_id = (int)$_COOKIE["dpnstash_id_usuario"];

            // include ("../Cliente/Cliente.php");
            // $Cliente = new Cliente();
            // $Cliente->vincularUsuarioCliente($id_insertado,$consultor_id);
            // $query = "CALL SP_VincularSuscriptor(
            //    $objeto->_usuario_id,
            //    $objeto->_nombre_negocio,
            //    $objeto->_consultor_id,
            //    $objeto->_consultor_viewer,
            //    $objeto->_paquete_id,
            //    $objeto->_fecha_pago,
            //    $objeto->_pagado
            // )";
            $query = "CALL SP_VincularSuscriptor($id_insertado)";
            $this->Procedure($query);
         }
         else if ($perfil_id == 5) { // EMPLEADO
            $suscriptor_id = null;
            if ($_COOKIE["dpnstash_perfil_id"] == "3") $suscriptor_id = (int)$_COOKIE["dpnstash_id_usuario"];

            // include ("../Empleado/Empleado.php");
            // $Empleado = new Empleado();
            // $Empleado->vincularUsuarioEmpleado($id_insertado,$suscriptor_id);
            $query = "CALL SP_VincularEmpleado($id_insertado, $objeto)";
            $this->Procedure($query);
         }

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'User registered.',
         );

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));

   }

   function editarUsuario($usuario,$correo,$contrasenia,$perfil_id,$actualizado,$cambio_contrasenia,$id){
      try {
        $respuesta = $this->respuestaDefault();

         if ($cambio_contrasenia) {
            $contrasenia_hash = password_hash($contrasenia,PASSWORD_DEFAULT);
            $query = "UPDATE usuarios SET usuario=?, correo=?, contrasenia=?, perfil_id=?, actualizado=? WHERE id=?";
            $this->ExecuteQueryAndContinue($query,array($usuario,$correo,$contrasenia_hash,$perfil_id,$actualizado,$id));
         } else {
            $query = "UPDATE usuarios SET usuario=?, correo=?, perfil_id=?, actualizado=? WHERE id=?";
            $this->ExecuteQueryAndContinue($query,array($usuario,$correo,$perfil_id,$actualizado,$id));
         }

         $id = $_COOKIE["dpnstash_id_usuario"];
         // $this->eliminarCookies();
         $this->establecerCookies($id);

         $this->CerrarConexion();

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'User updated.',
         );
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function eliminarUsuario($eliminado,$id) {
      try {
        $respuesta = $this->respuestaDefault();

         $query = "UPDATE usuarios SET activo=0, eliminado=? WHERE id=?";
         $this->ExecuteQuery($query,array($eliminado,$id));

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'User deleted.',
         );
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }



   function verificarDatoDisponible($campo,$dato,$propiedadTitulo,$propiedadTexto){
     $query = "SELECT count(*) as duplicado FROM usuarios WHERE $campo='$dato' AND activo=1";

     $consulta = $this->SelectOneAndContinue($query);
     if ($consulta["duplicado"] > 0) {
       $respuesta = array(
          "Resultado" => true,
          "Icono_alerta" => 'warning',
          "Titulo_alerta" => "$propiedadTitulo unavailable!",
          "Texto_alerta" => "<b>$propiedadTexto</b> already exists, try a different one.",
       );
     } else {
       $respuesta = array(
         "Resultado" => false,
        );
     }
     return $respuesta;
   }



   #region INFO PERFIL
   function vincularUsuario($id_usuario) {
      try {
         $respuesta = $this->respuestaDefault();

         $query = "INSERT INTO info_usuarios(info_usuario_id) VALUES(?)";
         $this->ExecuteQueryAndContinue($query, array($id_usuario));

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
   }
   function mostrarPerfil($id_usuario,$perfil_id) {
      try {
         $respuesta = $this->respuestaDefault();
         error_log("mostrar Perfil = id_usuario:$id_usuario, perfil_id: $perfil_id");

         if ($perfil_id <= 2) {
            $query = "SELECT u.id, u.usuario, u.correo, iu.info_nombres, iu.info_apellidos, iu.info_estado, iu.info_ciudad, iu.info_imagen 
            FROM usuarios as u INNER JOIN info_usuarios as iu ON iu.info_usuario_id=u.id WHERE u.id=$id_usuario";
         }
         else if ($perfil_id == 3) {
            $query = "SELECT * FROM VW_Consultores c WHERE c.id=$id_usuario";
         }
         else if ($perfil_id == 4) {
            $query = "SELECT * FROM VW_Suscriptores s WHERE s.id=$id_usuario";
         }
         else if ($perfil_id == 5) {
            $query = "SELECT * FROM VW_Empleados e WHERE e.id=$id_usuario";
         }
         $consulta = $this->SelectOnlyOne($query);
         if (!empty($consulta)) {
            $respuesta = array(
               "Resultado" => true,
               "Icono_alerta" => 'success',
               "Titulo_alerta" => 'SUCCESS',
               "Texto_alerta" => 'User found.',
               "Datos" => $consulta
            );
         }

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function mostrartema($id_usuario) {
      try {
        $respuesta = $this->respuestaDefault();

         $query = "SELECT id,tema_oscuro
         FROM usuarios
         WHERE id= $id_usuario";
         $consulta = $this->SelectOnlyOne($query);
         if (!empty($consulta)) {
            $respuesta = array(
               "Resultado" => true,
               "Icono_alerta" => 'success',
               "Titulo_alerta" => 'SUCCESS',
               "Texto_alerta" => 'theme changed.',
               "Datos" => $consulta
            );
         }

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function editartema($id_usuario) {
      try {
        $respuesta = $this->respuestaDefault();

         $query = "UPDATE usuarios
         SET tema_oscuro= 1
         WHERE id= $id_usuario";
         $consulta = $this->SelectOnlyOne($query);

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'theme changed.',
         );

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function editartemaclaro($id_usuario) {
      try {
        $respuesta = $this->respuestaDefault();

         $query = "UPDATE usuarios
         SET tema_oscuro= 0
         WHERE id= $id_usuario";
         $consulta = $this->SelectOnlyOne($query);

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'theme changed.',
         );

      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }

   function editarPerfil($id,$info_usuario_id,$usuario,$nombres,$apellidos,$estado,$ciudad){
      try {
        error_log("la consulta se esta executando");
        $respuesta = $this->respuestaDefault();

         $query = "update usuarios u inner join info_usuarios iu on u.id = iu.info_usuario_id set u.usuario=?, iu.info_nombres=?, iu.info_apellidos=?, iu.info_estado=?, iu.info_ciudad=? WHERE u.id=?";
         $this->ExecuteQueryAndContinue($query,array($id,$info_usuario_id,$usuario,$nombres,$apellidos,$estado,$ciudad));

         $id = $_COOKIE["dpnstash_id_usuario"];
         // $this->eliminarCookies();
         $this->establecerCookies($id);

         $this->CerrarConexion();

         $respuesta = array(
            "Resultado" => true,
            "Icono_alerta" => 'success',
            "Titulo_alerta" => 'SUCCESS',
            "Texto_alerta" => 'User updated.',
         );
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      die(json_encode($respuesta));
   }
   #endregion INFO PERFIL

   #region VALIDAR SUSCRPCIONES PAGASDAS
   function validarSuscripcionPagada($id) {
      try {
         $respuesta = array(
            "Resultado" => false,
            "Icono_alerta" => 'warning',
            "Titulo_alerta" => "Upss!",
            "Texto_alerta" => "Lo sentimos no has relizado el pago d la mensaulidad.",
         );
         
         $query = "CALL SP_ValidarSuscripcionPagada($id);";
         $consulta = $this->Procedure($query);
         echo "a revisarts: $query <br>";
         error_log(print_r($consulta,true));
         if (!empty($consulta)) {
            $respuesta = array(
               "Resultado" => true,
               "pago_vencido" => $consulta[0]["pago_vencido"],
               "Icono_alerta" => "info",
               "Titulo_alerta" => "This payment has already been made",
               "Texto_alerta" => "",
            );
         }
      } catch (Exception $e) {
         $mensaje_error = "Error: ".$e->getMessage();
         $respuesta = $this->respuestaCatch($mensaje_error);
      }
      return $respuesta;
   }
   #endregion VALIDAR SUSCRPCIONES PAGASDAS

}