<?php

class ControladorUsuarios{

	/*=============================================
	INGRESO DE USUARIO
	=============================================*/

	static public function ctrIngresoUsuario(){

		if(isset($_POST["ingUsuario"])){
			if(preg_match('/^[a-zA-Z0-9]+$/', $_POST["ingUsuario"]) &&
			   preg_match('/^[a-zA-Z0-9]+$/', $_POST["ingPassword"])){
			   	$encriptar = crypt($_POST["ingPassword"], '$2a$07$asxx54ahjppf45sd87a5a4dDDGsystemdev$'); 
				$tabla = "usuario";
				$item = "usuario";
				$valor = $_POST["ingUsuario"];
				$respuesta = ModeloUsuarios::MdlMostrarUsuarios($tabla, $item, $valor);
				if($respuesta["usuario"] == $_POST["ingUsuario"] && $respuesta["password"] == $encriptar){
					if($respuesta["estado"] == "activo"){
						$_SESSION["iniciarSesion"] = "ok";
						$_SESSION["id"] = $respuesta["id_usuario"];
						/*=============================================
						CARGAR PERMISOS DINÁMICOS
						=============================================*/
						$permisos = ModeloUsuarios::mdlObtenerPermisos($respuesta["id_usuario"]);
						// Creamos un array simple para que sea fácil de consultar: ['PACIENTE-VER', 'PACIENTE-CREAR', ...]
						$listaPermisos = array();
						foreach ($permisos as $key => $value) {
							array_push($listaPermisos, $value["modulo"] . "-" . $value["accion"]);
						}
						$_SESSION["permisos"] = $listaPermisos;
						$_SESSION["id_empleado"] = $respuesta["id_empleado"];
						$_SESSION["usuario"] = $respuesta["usuario"];
						$_SESSION["foto"] = $respuesta["foto"];
						$_SESSION["tipo_usuario"] = $respuesta["nombre"];
						$_SESSION["rol_id"] = $respuesta["rol_id"];
						$_SESSION["id_area"] = $respuesta["id_area"];
						/*=============================================
						REGISTRAR FECHA PARA SABER EL ÚLTIMO LOGIN
						=============================================*/
						date_default_timezone_set("America/Lima");						
						$fecha = date('Y-m-d');
						$hora = date('H:i:s');
						$fechaActual = $fecha.' '.$hora;
						$item1 = "ultimo_login";
						$valor1 = $fechaActual;
						$item2 = "id_usuario";
						$valor2 = $respuesta["id_usuario"];
						$ultimoLogin = ModeloUsuarios::mdlActualizarUsuario($tabla, $item1, $valor1, $item2, $valor2);
						if($ultimoLogin == "ok"){
							echo '<script>
								window.location = "inicio";
							</script>';
						}										
					}else{
						echo '<br>
							<div class="alert alert-danger">El usuario aún no está activado</div>';
					}		
				}else{
					echo '<br><div class="alert alert-danger">Error al ingresar, vuelve a intentarlo</div>';
				}
			}	
		}
	}

	/*=============================================
	REGISTRO DE USUARIO
	=============================================*/
	static public function ctrCrearUsuario(){
		if(isset($_POST["nuevoUsuario"])){
			if(
			   preg_match('/^[a-zA-Z0-9]+$/', $_POST["nuevoUsuario"]) &&
			   preg_match('/^[a-zA-Z0-9]+$/', $_POST["nuevoPassword"]) ){
				$ruta = "vistas/dist/img/usuarios/anonymous.png";
				if(!empty($_FILES["nuevaFoto"]["tmp_name"])){
					list($ancho, $alto) = getimagesize($_FILES["nuevaFoto"]["tmp_name"]);
					$nuevoAncho = 500;
					$nuevoAlto = 500;
					/*=============================================
					CREAMOS EL DIRECTORIO DONDE VAMOS A GUARDAR LA FOTO DEL USUARIO
					=============================================*/
					$directorio = "vistas/dist/img/usuarios/".$_POST["nuevoUsuario"];
					mkdir($directorio, 0755);
					/*=============================================
					DE ACUERDO AL TIPO DE IMAGEN APLICAMOS LAS FUNCIONES POR DEFECTO DE PHP
					=============================================*/
					if($_FILES["nuevaFoto"]["type"] == "image/jpeg"){
						/*============================================
						GUARDAMOS LA IMAGEN EN EL DIRECTORIO
						=============================================*/
						$aleatorio = mt_rand(100,999);
						$ruta = $directorio."/".$aleatorio.".jpg";
						$origen = imagecreatefromjpeg($_FILES["nuevaFoto"]["tmp_name"]);						
						$destino = imagecreatetruecolor($nuevoAncho, $nuevoAlto);
						imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoAncho, $nuevoAlto, $ancho, $alto);
						imagejpeg($destino, $ruta);
					}
					if($_FILES["nuevaFoto"]["type"] == "image/png"){
						/*=============================================
						GUARDAMOS LA IMAGEN EN EL DIRECTORIO
						=============================================*/
						$aleatorio = mt_rand(100,999);
						$ruta = $directorio."/".$aleatorio.".png";
						$origen = imagecreatefrompng($_FILES["nuevaFoto"]["tmp_name"]);						
						$destino = imagecreatetruecolor($nuevoAncho, $nuevoAlto);
						imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoAncho, $nuevoAlto, $ancho, $alto);
						imagepng($destino, $ruta);
					}
				}else {
					$ruta = "vistas/dist/img/usuarios/anonymous.png";
					$directorio = "vistas/dist/img/usuarios/".$_POST["nuevoUsuario"];
					mkdir($directorio, 0755);
				}
				$tabla = "usuario";
				$estado = "activo";
				$encriptar = crypt($_POST["nuevoPassword"], '$2a$07$asxx54ahjppf45sd87a5a4dDDGsystemdev$');
				$idArea = (isset($_POST["nuevaArea"]) && !empty($_POST["nuevaArea"])) ? $_POST["nuevaArea"] : 0;
				$datos = array("id_empleado" => $_POST["nuevoEmpleado"],
					           "usuario" => $_POST["nuevoUsuario"],
					           "password" => $encriptar,
							   "estado" => $estado,
					           "foto"=>$ruta,
							   "id_area" => $idArea);
							   
				$idUsuario = ModeloUsuarios::mdlIngresarUsuario($tabla, $datos);
			
				 if($idUsuario){
                // 2) Insertar relación usuario-rol
                $tablaUsuarioRol = "usuario_rol";
                $datosUsuarioRol = array(
                    "usuario_id" => $idUsuario,
                    "rol_id" => $_POST["nuevoPerfil"]
                );

                $respuesta = ModeloUsuarios::mdlInsertarUsuarioRol($tablaUsuarioRol, $datosUsuarioRol);

                if($respuesta == "ok"){
                    echo '<script>
                        swal({
                            type: "success",
                            title: "Usuario registrado correctamente",
                            showConfirmButton: true,
                            confirmButtonText: "Cerrar"
                        }).then(function(result){
                            if(result.value){ window.location = "usuarios"; }
                        });
                    </script>';
                }
			}
				
			}else{
				echo '<script>
					swal({
						type: "error",
						title: "¡El usuario no puede ir vacío o llevar caracteres especiales!",
						showConfirmButton: true,
						confirmButtonText: "Cerrar"
					}).then(function(result){
						if(result.value){
							window.location = "usuarios";
						}
					});
				</script>';
			}

		}


	}

	/*=============================================
	LISTAR USUARIO
	=============================================*/

	static public function ctrMostrarUsuarios($item, $valor){

		$tabla = "usuario";

		$respuesta = ModeloUsuarios::MdlMostrarUsuarios($tabla, $item, $valor);

		return $respuesta;
	}



	/*=============================================
	MOSTRAR USUARIO
	=============================================*/

	static public function ctrMostrarUsuarios2($item, $valor){

		$tabla = "usuario";

		$respuesta = ModeloUsuarios::MdlMostrarUsuarios2($tabla, $item, $valor);

		return $respuesta;
	}

	/*=============================================
	MOSTRAR USUARIO PARA VENDEDOR
	=============================================*/

	static public function ctrMostrarUsuarios1($item, $valor){

		$tabla = "usuario_rol";

		$respuesta = ModeloUsuarios::MdlMostrarUsuarios1($tabla, $item, $valor);

		return $respuesta;
	}

	/*=============================================
	EDITAR USUARIO
	=============================================*/

	static public function ctrEditarUsuario(){
		if(isset($_POST["editarUsuario"])){
			if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["editarNombre"])){
				$ruta = $_POST["fotoActual"];
				if(isset($_FILES["editarFoto"]["tmp_name"]) && !empty($_FILES["editarFoto"]["tmp_name"])){
					list($ancho, $alto) = getimagesize($_FILES["editarFoto"]["tmp_name"]);
					$nuevoAncho = 500;
					$nuevoAlto = 500;
					/*=============================================
					CREAMOS EL DIRECTORIO DONDE VAMOS A GUARDAR LA FOTO DEL USUARIO
					=============================================*/
					$directorio = "vistas/dist/img/usuarios/".$_POST["editarUsuario"];
					/*=============================================
					PRIMERO PREGUNTAMOS SI EXISTE OTRA IMAGEN EN LA BD
					=============================================*/
					if(!empty($_POST["fotoActual"]) && $_POST["fotoActual"] != "vistas/dist/img/usuarios/anonymous.png"){
						unlink($_POST["fotoActual"]);
					}else{
						mkdir($directorio, 0755);
					}	
					/*=============================================
					DE ACUERDO AL TIPO DE IMAGEN APLICAMOS LAS FUNCIONES POR DEFECTO DE PHP
					=============================================*/
					if($_FILES["editarFoto"]["type"] == "image/jpeg"){
						/*=============================================
						GUARDAMOS LA IMAGEN EN EL DIRECTORIO
						=============================================*/
						$aleatorio = mt_rand(100,999);
						$ruta = "vistas/dist/img/usuarios/".$_POST["editarUsuario"]."/".$aleatorio.".jpg";
						$origen = imagecreatefromjpeg($_FILES["editarFoto"]["tmp_name"]);						
						$destino = imagecreatetruecolor($nuevoAncho, $nuevoAlto);
						imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoAncho, $nuevoAlto, $ancho, $alto);
						imagejpeg($destino, $ruta);
					}
					if($_FILES["editarFoto"]["type"] == "image/png"){
						/*=============================================
						GUARDAMOS LA IMAGEN EN EL DIRECTORIO
						=============================================*/
						$aleatorio = mt_rand(100,999);
						$ruta = "vistas/dist/img/usuarios/".$_POST["editarUsuario"]."/".$aleatorio.".png";
						$origen = imagecreatefrompng($_FILES["editarFoto"]["tmp_name"]);						
						$destino = imagecreatetruecolor($nuevoAncho, $nuevoAlto);
						imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoAncho, $nuevoAlto, $ancho, $alto);
						imagepng($destino, $ruta);
					}
				}
				$tabla = "usuario";
				if($_POST["editarPassword"] != ""){
					if(preg_match('/^[a-zA-Z0-9]+$/', $_POST["editarPassword"])){
						$encriptar = crypt($_POST["editarPassword"], '$2a$07$asxx54ahjppf45sd87a5a4dDDGsystemdev$');
					}else{
						echo'<script>
								swal({
									  type: "error",
									  title: "¡La contraseña no puede ir vacía o llevar caracteres especiales!",
									  showConfirmButton: true,
									  confirmButtonText: "Cerrar"
									  }).then(function(result){
										if (result.value) {
										window.location = "usuarios";
										}
									})
						  	</script>';
					}
				}else{
					$encriptar = $_POST["passwordActual"];
				}

				// Si editarArea no existe o está vacío, enviamos 0
            	$idArea = (isset($_POST["editarArea"]) && !empty($_POST["editarArea"])) ? $_POST["editarArea"] : 0;

				$datos = array("usuario" => $_POST["editarUsuario"],
							   "password" => $encriptar,
							   "rol_id" => $_POST["editarPerfil"],
							   "foto" => $ruta,
							   "usuario_id" =>  $_POST["usuario_id"],
							   "id_area" => $idArea);
				$respuesta = ModeloUsuarios::mdlEditarUsuario($tabla, $datos);
				if($respuesta == "ok"){
					echo'<script>
					swal({
						  type: "success",
						  title: "El usuario ha sido editado correctamente",
						  showConfirmButton: true,
						  confirmButtonText: "Cerrar"
						  }).then(function(result){
									if (result.value) {
									window.location = "usuarios";									
									}
							})

					</script>';
		
				}


			}else{

				echo'<script>

					swal({
						  type: "error",
						  title: "¡El nombre no puede ir vacío o llevar caracteres especiales!",
						  showConfirmButton: true,
						  confirmButtonText: "Cerrar"
						  }).then(function(result){
							if (result.value) {

							window.location = "usuarios";

							}
						})

			  	</script>';

			}

		}

	}

	/*=============================================
	BORRAR USUARIO
	=============================================*/

	static public function ctrBorrarUsuario(){

		if(isset($_GET["idUsuario"])){
			$tabla ="usuario";
			$datos = $_GET["idUsuario"];
			if($_GET["fotoUsuario"] != "" && $_GET["fotoUsuario"] != "vistas/dist/img/usuarios/anonymous.png"){
				unlink($_GET["fotoUsuario"]);
				rmdir('vistas/dist/img/usuarios/'.$_GET["usuario"]);
			}
				rmdir('vistas/dist/img/usuarios/'.$_GET["usuario"]);
			$respuesta = ModeloUsuarios::mdlBorrarUsuario($tabla, $datos);
			if($respuesta == "ok"){
				echo'<script>
				swal({
					  type: "success",
					  title: "El usuario ha sido borrado correctamente",
					  showConfirmButton: true,
					  confirmButtonText: "Cerrar"
					  }).then(function(result){
								if (result.value) {

								window.location = "usuarios";

								}
							})

				</script>';

			}		

		}

	}


}