<?php 

if(@$_POST['peticion'] == 'ajax'){
	require_once "../modelo/usuario.modelo.php";
}else{
	require_once "../../modelo/usuario.modelo.php";
}

class ControladorUsario extends ModeloUsario
{
	
	/*=================================================================================
	CONSULTA PERFIES
	==================================================================================*/
	public function ctrCosultaPerfiles(){

		$resultaoPerfil = ModeloUsario::mdlCosultaPerfiles();

		$perfiles = $resultaoPerfil->fetchAll();

		return $perfiles;

	}	

	/*=================================================================================
	CONSULTA PROCESOS
	==================================================================================*/
	public function ctrConsultaProcesos(){

		$resultaoPerfil = ModeloUsario::mdlConsultaProcesos();

		$perfiles = $resultaoPerfil->fetchAll();

		return $perfiles;

	}

	/*=================================================================================
	REGISTRA USUARIOS
	==================================================================================*/
	public function ctrRegistraUsuario(){

		try {
			
			// Carpeta en la que se almacenan las fotos.
			$ruta = "../vista/lib/dist/img/imgusers/";

			// Concateno el nombre de la foto al directorio $ruta 
			$foto = $ruta.$_FILES['foto']['name'];

			// Sube foto al servidor 
			move_uploaded_file($_FILES['foto']['tmp_name'], $foto);

			if($_POST['customSwitusuario'] == 'on'){
				$_POST['customSwitusuario'] = 1;
			}else{
				$_POST['customSwitusuario'] = 0;
			}

			// Datos de usuario
			$datos = [
				'nombre' 			=> strtoupper($_POST['nombre']),
				'apellido' 			=> strtoupper($_POST['apellido']),
				'correo' 			=> strtolower($_POST['correo']),
				'proceso' 			=> $_POST['proceso'],
				'celular' 			=> $_POST['celular'],
				'foto' 			    => $_FILES['foto']['name'],
				'perfil' 			=> $_POST['perfil'],
				'clave' 			=> $_POST['clave'],
				'direccion' 		=> strtoupper($_POST['direccion']),
				'cargo' 			=> strtoupper($_POST['cargo']),
				'customSwitusuario' => $_POST['customSwitusuario'],
				'id_usuario'        => $_POST['id_usuario'],
				'fecha'             => date('Y-m-d H:i:s'),
			];

			// Validación de campos
			if (trim($_POST['nombre']) == "") {

				echo json_encode(array('error' => 'El campo <b>Nombre</b> es requerido.'));	
				exit();

			}

			if (trim($_POST['apellido']) == "") {

				echo json_encode(array('error' => 'El campo <b>Apellidos</b> es requerido.'));	
				exit();

			}

			if (trim($_POST['perfil']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Perfil</b> es requerido.'));	
				exit();

			}

			// Condicional para validar formato de correo. 
			if (!filter_var($datos['correo'], FILTER_VALIDATE_EMAIL)) {

				echo json_encode(array('error' => 'El <b>Correo</b> ('.$datos['correo'].') es invalido.'));	
				exit();

			}

			if (trim($_POST['clave']) == "") {

				echo json_encode(array('error' => 'El campo <b>Contraseña</b> es requerido.'));	
				exit();

			}

			// Condicional para validar el tamaño de la cadena (clave).
			if(strlen(trim($_POST['clave'])) >= 6){

						// Condicional para validar si la cadena clave está en minuscula.
						if(ctype_lower(trim($_POST['clave'])) == true){

							echo json_encode(array('error' => 'La <b>Contraseña</b> debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.'));	
									exit();
						
						}else{

							// Condicional para validar si la cadena (clave) es alfanumerica
							if(ctype_alpha(trim($_POST['clave'])) == true){

								echo json_encode(array('error' => 'La <b>Contraseña</b> debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.'));	
									exit();

							}else{

								// Condicional para validad si la cadena (clave) es numerica
								if(ctype_digit(trim($_POST['clave'])) == true){

									echo json_encode(array('error' => 'La <b>Contraseña</b> debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.'));	
									exit();

								}

							}

						}

				}else{

					echo json_encode(array('error' => 'La <b>Contraseña</b> debe contener como mínimo 6 caracteres, debe contener letras mayúsculas y números.'));	
					exit();

				}

			if (trim($_POST['proceso']) == 0) {

				echo json_encode(array('error' => 'El campo <b>Proceso</b> es requerido.'));	
				exit();

			}

			if (trim($datos['foto']) != "") {

				// El método explode permite disidir un string estableciendo un delimitador en este caso utilizamos el punto para a partir de este validar la extensión de un archivo.
				$datosFoto = explode('.', trim($datos['foto']));
				
				if ($datosFoto[1] != "png" && $datosFoto[1] != "jpg" && $datosFoto[1] != "jpeg" && $datosFoto[1] != "gif" && $datosFoto[1] != "tif" && $datosFoto[1] != "tiff") {
				
					echo json_encode(array('error' => 'La extensión del archivo es inválida. Extensiones permitidas: PNG, JPG, JPEG, GIF.'));	
					exit();

				}

			}

			if (trim($_POST['direccion']) == "") {

				echo json_encode(array('error' => 'El campo <b>Dirección</b> es requerido.'));	
				exit();

			}

			if (trim($_POST['celular']) == "") {

				echo json_encode(array('error' => 'El campo <b>Celular</b> es requerido.'));	
				exit();

			}else if(strlen($_POST['celular']) < 10 || strlen($_POST['celular']) > 10){
				
				echo json_encode(array('error' => 'El campo <b>Celular</b> debe contener 10 dígitos. Dígitos ingresados: '.strlen($_POST['celular'])));	
				exit();					
			
			}

			if (trim($_POST['cargo']) == "") {

				echo json_encode(array('error' => 'El campo <b>Cargo</b> es requerido.'));	
				exit();

			}

			// Consulta usuario
			$consultaUsuario = ModeloUsario::mdlConsultaUsuarioCorreo($datos['correo']);
			// Información consultada
			$usuario = $consultaUsuario->fetch();
			// Validación de cantidad de registros obtenidos
			if($consultaUsuario->rowcount() >= 1 && $_POST['accion'] == 'actualiza_usuario'){

				// Si la contraseña obtenida en la consulta del usuario es igual a la enviada desde la vista, la contraseña enviada no se encripta, de lo contrario se encripta con md5 para posteriormente almacenerla en la base de datos.
				if($usuario['contrasena'] != trim($datos['clave'])){

					$datos += ['clave_nueva' => md5($datos['clave'])];
				
				}

				// Actualiza usuario
				$actualizaUsuario = ModeloUsario::mdlActualizaUsuario($datos);

				// Valido la cantidad de filas afectadas y de a cuerdo a estas imprimo un mensaje de error o de confirmación.
				if($actualizaUsuario->rowcount() == 1){

					echo json_encode(array('success' => 'Usuario actualizado.'));
				
				}else{
					
					echo json_encode(array('error' => 'No se realizó ningún cambio.'));
				
				}

			}else{

				// Si la cantidad de filas encontradas es mayor o igual a uno significa que el correo ingresado ya se encuentra registrado en el sistema.
				if($consultaUsuario->rowcount() >= 1){

					echo json_encode(array('error' => 'El correo <b>'.$datos['correo'].'</b> ya se encuentra registrado en el sistema.'));
					exit();

				}

				// Ejecuto función modelo encargada de registrar un usuario.
				$resultaoPerfil = ModeloUsario::mdlRegistraUsuario($datos);
				// Valido la cantidad de filas afectadas y de a cuerdo a estas imprimo un mensaje de error o de confirmación.
				if($resultaoPerfil->rowcount() == 1){

					echo json_encode(array('success' => 'Usuario registrado exitosamente.'));
				
				}else{
					
					echo json_encode(array('error' => 'No se pudo registrar el usuario.'));
				
				}

			}

		} catch (Exception $e) {

			echo json_encode(array('error' => $e->getMessage()));			
		
		}	
	
	}

	/*=================================================================================
	REGISTRA USUARIOS
	==================================================================================*/
	public function ctrConsultaUsuario(){

			// Consulta usuario usuarios
			$consultaUsuario = ModeloUsario::mdlConsultaUsuario($_POST['nombre']);
			$resultado = $consultaUsuario->fetchAll();
			if($consultaUsuario->rowcount() >= 1){

				// Recorro cada uno de los registros obtenidos en la consulta de usuarios y los imprimo en formato tabla html.
				foreach ($resultado as $key => $value) { ?>
						 
						 <tr onclick="asignaUsuario('<?php echo $value['nombres'] ?>', '<?php echo $value['apellidos'] ?>', '<?php echo $value['correo'] ?>', '<?php echo $value['contrasena'] ?>', '<?php echo $value['celular'] ?>', '<?php echo $value['direccion'] ?>', '<?php echo $value['estado'] ?>', '<?php echo $value['id_proceso'] ?>', '<?php echo $value['id_perfil'] ?>', '<?php echo $value['imagen'] ?>', '<?php echo $value['cargo'] ?>');"><?php	
					echo '
							<td>'.$value['nombres'].'</td>
							<td>'.$value['apellidos'].'</td>
						</tr>';
							
				}

			}
				

	}		

}

// En el siguiente código se ejecutan funciones controladoras de a cuerdo a las peticiones ajax realizadas.
if(isset($_POST['accion'])) {

	$objUsuario = new ControladorUsario();
	
	if($_POST['accion'] == "registrar_usuario" || $_POST['accion'] == "actualiza_usuario"){

		$objUsuario->ctrRegistraUsuario();
	
	}

	if($_POST['accion'] == "consultar_usuario"){

		$objUsuario->ctrConsultaUsuario();
	
	}

}
 ?>