<?php
if (strlen(session_id()) < 1) {
    session_start();
}
if (strlen(session_id()) < 1)
	session_start();
require_once "../modelos/Usuario.php";

$usuario = new Usuario();

$idusuario = isset($_POST["idusuario"]) ? limpiarCadena($_POST["idusuario"]) : "";
$idpersona = isset($_POST["idpersona"]) ? limpiarCadena($_POST["idpersona"]) : "";
$nombre = isset($_POST["nombre"]) ? limpiarCadena($_POST["nombre"]) : "";
$apaterno = isset($_POST["apaterno"]) ? limpiarCadena($_POST["apaterno"]) : "";
$amaterno = isset($_POST["amaterno"]) ? limpiarCadena($_POST["amaterno"]) : "";
$fecha_nacimiento = isset($_POST["fecha_nacimiento"]) ? limpiarCadena($_POST["fecha_nacimiento"]) : "";
$sexo = isset($_POST["sexo"]) ? limpiarCadena($_POST["sexo"]) : "";
$estado_civil = isset($_POST["estado_civil"]) ? limpiarCadena($_POST["estado_civil"]) : "";
$tipo_documento = isset($_POST["tipo_documento"]) ? limpiarCadena($_POST["tipo_documento"]) : "";
$num_documento = isset($_POST["num_documento"]) ? limpiarCadena($_POST["num_documento"]) : "";
$direccion = isset($_POST["direccion"]) ? limpiarCadena($_POST["direccion"]) : "";
$telefono = isset($_POST["telefono"]) ? limpiarCadena($_POST["telefono"]) : "";
$email = isset($_POST["email"]) ? limpiarCadena($_POST["email"]) : "";
$ocupacion = isset($_POST["ocupacion"]) ? limpiarCadena($_POST["ocupacion"]) : "";
$cargo = isset($_POST["cargo"]) ? limpiarCadena($_POST["cargo"]) : "";
$especialidad = isset($_POST["especialidad"]) ? limpiarCadena($_POST["especialidad"]) : "";
$registro_senescyt = isset($_POST["registro_senescyt"]) ? limpiarCadena($_POST["registro_senescyt"]) : "";
$login = isset($_POST["login"]) ? limpiarCadena($_POST["login"]) : "";
$clave = isset($_POST["clave"]) ? limpiarCadena($_POST["clave"]) : "";

switch ($_GET["op"]) {
	case 'guardaryeditar':


		if (empty($idusuario)) {
			//Hash SHA256 en la contraseña (Solo para nuevos)
			$clavehash = hash("SHA256", $clave);
			$rspta = $usuario->insertar($apaterno, $amaterno, $nombre, $fecha_nacimiento, $sexo, $estado_civil, $tipo_documento, $num_documento, $direccion, $telefono, $email, $ocupacion, $cargo, $especialidad, $registro_senescyt, $login, $clavehash, $_POST['permiso']);
			echo $rspta ? "Usuario registrado" : "No se pudieron registrar todos los datos del usuario";
		} else {
			// Si la clave viene vacía en edición, enviamos vacío para que el modelo no la actualice
			$clavehash = !empty($clave) ? hash("SHA256", $clave) : "";
			$rspta = $usuario->editar($idpersona, $apaterno, $amaterno, $nombre, $fecha_nacimiento, $sexo, $estado_civil, $tipo_documento, $num_documento, $direccion, $telefono, $email, $ocupacion, $cargo, $especialidad, $registro_senescyt, $login, $clavehash, $_POST['permiso']);
			echo $rspta ? "Usuario actualizado" : "Usuario no se pudo actualizar";
		}
		break;

	case 'desactivar':
		$rspta = $usuario->desactivar($idusuario);
		echo $rspta ? "Usuario Desactivado" : "Usuario no se puede desactivar";
		break;

	case 'activar':
		$rspta = $usuario->activar($idusuario);
		echo $rspta ? "Usuario activado" : "Usuario no se puede activar";
		break;

	case 'mostrar':
		$rspta = $usuario->mostrar($idusuario);
		//Codificar el resultado utilizando json
		echo json_encode($rspta);
		break;

	case 'listar':
		$rspta = $usuario->listar();
		//Vamos a declarar un array
		$data = array();

		while ($reg = $rspta->fetch_object()) {
			$data[] = array(
				"0" => ($reg->condicion) ? '<button title="Editar" class="btn btn-warning" onclick="mostrar(' . $reg->idusuario . ')"><i class="fa fa-pencil"></i></button>' .
					' <button title="Desactivar" class="btn btn-danger" onclick="desactivar(' . $reg->idusuario . ')"><i class="fa fa-close"></i></button>' :
					'<button title="Editar" class="btn btn-warning" onclick="mostrar(' . $reg->idusuario . ')"><i class="fa fa-pencil"></i></button>' .
					' <button title="Activar" class="btn btn-primary" onclick="activar(' . $reg->idusuario . ')"><i class="fa fa-check"></i></button>',
				"1" => $reg->apaterno . ' ' . $reg->amaterno,
				"2" => $reg->nombre,
				"3" => $reg->fecha_nacimiento,
				"4" => $reg->sexo,
				"5" => $reg->estado_civil,
				"6" => $reg->tipo_documento,
				"7" => $reg->num_documento,
				"8" => $reg->cargo,
				"9" => $reg->especialidad,
				"10" => $reg->login,
				"11" => ($reg->condicion) ? '<span class="label bg-green">Activado</span>' :
					'<span class="label bg-red">Desactivado</span>'
			);
		}
		$results = array(
			"sEcho" => 1, //Información para el datatables
			"iTotalRecords" => count($data), //enviamos el total registros al datatable
			"iTotalDisplayRecords" => count($data), //enviamos el total registros a visualizar
			"aaData" => $data
		);
		echo json_encode($results);

		break;

	case 'permisos':
		//Obtenemos todos los permisos de la tabla permisos
		require_once "../modelos/Permiso.php";
		$permiso = new Permiso();
		$rspta = $permiso->listar();

		//Obtener los permisos asignados al usuario
		$id = $_GET['id'];
		$marcados = $usuario->listarmarcados($id);
		//Declaramos el array para almacenar todos los permisos marcados
		$valores = array();

		//Almacenar los permisos asignados al usuario en el array
		while ($per = $marcados->fetch_object()) {
			array_push($valores, $per->idpermiso);
		}

		//Mostramos la lista de permisos en la vista y si están o no marcados
		while ($reg = $rspta->fetch_object()) {
			$sw = in_array($reg->idpermiso, $valores) ? 'checked' : '';
			echo '<li> <input type="checkbox" ' . $sw . '  name="permiso[]" value="' . $reg->idpermiso . '">' . $reg->nombre . '</li>';
		}
		break;

	case 'verificar':
		$logina = $_POST['logina'];
		$clavea = $_POST['clavea'];

		//Hash SHA256 en la contraseña
		$clavehash = hash("SHA256", $clavea);

		// Corrección: Obtener Apellidos y Nombres para sesión completa
		//$rspta = $usuario->verificar($logina, $clavehash); -> El metodo original solo traia p.nombre
		// Haremos un override manual de la query aqui o modificamos el modelo. 
		// Mejor modificamos la query aqui para no tocar el modelo si es usado en otros lados sensiblemente, 
		// O mejor aun, en el modelo verifiquemos que trae.
		// El modelo trae: p.nombre, p.tipo_documento, ...
		// Modificaremos la asignacion asumiendo que el modelo podria ser actualizado, PERO como no queremos romper nada:
		// Vamos a hacer una query directa aqui temporalmente o mejor actualizamos el modelo Usuario::verificar (es mas limpio).

		// REVISANDO modelo Usuario.php linea 110:
		// $sql="SELECT u.idusuario,p.nombre,p.tipo_documento... 
		// Vamos a modificar el MODELO mejor.

		$rspta = $usuario->verificar($logina, $clavehash);

		$fetch = $rspta->fetch_object();

		if (isset($fetch)) {
			//Declaramos las variables de sesión
			$_SESSION['idusuario'] = $fetch->idusuario;
			$_SESSION['idempleado'] = $fetch->idusuario; // Asignamos idempleado mismo que usuario
			$_SESSION['imagen'] = $fetch->imagen;
			// Concatenamos si existen los campos, sino mantenemos compatibilidad
			$nombre_completo = $fetch->nombre;
			if (isset($fetch->apaterno)) {
				$nombre_completo = $fetch->nombre . ' ' . $fetch->apaterno . ' ' . $fetch->amaterno;
			}
			$_SESSION['nombre'] = $nombre_completo;
			$_SESSION['login'] = $fetch->login;

			//Obtenemos los permisos del usuario
			$marcados = $usuario->listarmarcados($fetch->idusuario);

			//Declaramos el array para almacenar todos los permisos marcados
			$valores = array();

			//Almacenamos los permisos marcados en el array
			while ($per = $marcados->fetch_object()) {
				array_push($valores, $per->idpermiso);
			}

			in_array(1, $valores) ? $_SESSION['escritorio']   = 1 : $_SESSION['escritorio']   = 0;
			in_array(2, $valores) ? $_SESSION['pacientes']    = 1 : $_SESSION['pacientes']    = 0;
			in_array(3, $valores) ? $_SESSION['clinica']      = 1 : $_SESSION['clinica']      = 0;
			in_array(4, $valores) ? $_SESSION['atencion']     = 1 : $_SESSION['atencion']     = 0;
			in_array(5, $valores) ? $_SESSION['triaje']       = 1 : $_SESSION['triaje']       = 0;
			in_array(6, $valores) ? $_SESSION['resultado']    = 1 : $_SESSION['resultado']    = 0;
			in_array(7, $valores) ? $_SESSION['consultas']    = 1 : $_SESSION['consultas']    = 0;
			in_array(8, $valores) ? $_SESSION['laboratorio']  = 1 : $_SESSION['laboratorio']  = 0;
			in_array(9, $valores) ? $_SESSION['rx']           = 1 : $_SESSION['rx']           = 0;
			
			// --- NUEVOS PERMISOS GRANULARES ---
			in_array(10, $valores) ? $_SESSION['agenda']      = 1 : $_SESSION['agenda']      = 0;
			in_array(11, $valores) ? $_SESSION['odontologia'] = 1 : $_SESSION['odontologia'] = 0;
			in_array(12, $valores) ? $_SESSION['firma']       = 1 : $_SESSION['firma']       = 0;
			in_array(13, $valores) ? $_SESSION['inventario']  = 1 : $_SESSION['inventario']  = 0;
			in_array(14, $valores) ? $_SESSION['certificados']= 1 : $_SESSION['certificados']= 0;
			in_array(15, $valores) ? $_SESSION['examenes']    = 1 : $_SESSION['examenes']    = 0;
			in_array(16, $valores) ? $_SESSION['facturacion'] = 1 : $_SESSION['facturacion'] = 0;
			in_array(17, $valores) ? $_SESSION['ayuda']       = 1 : $_SESSION['ayuda']       = 0;
			in_array(18, $valores) ? $_SESSION['acerca_de']   = 1 : $_SESSION['acerca_de']   = 0;
			in_array(19, $valores) ? $_SESSION['contabilidad']= 1 : $_SESSION['contabilidad']= 0;
			in_array(20, $valores) ? $_SESSION['chat_interno']= 1 : $_SESSION['chat_interno']= 0;
			in_array(21, $valores) ? $_SESSION['interconsultas']= 1 : $_SESSION['interconsultas']= 0;

			// Lógica para determinar dónde redirigir al usuario al loguearse
			$redirect = "escritorio.php"; // por defecto
			if (in_array(1, $valores)) {
				$redirect = "escritorio.php";
			} elseif (in_array(8, $valores)) {
				$redirect = "laboratorio.php";
			} elseif (in_array(9, $valores)) {
				$redirect = "rx.php";
			} elseif (in_array(4, $valores)) {
				$redirect = "atencion.php";
			} elseif (in_array(2, $valores)) {
				$redirect = "paciente.php";
			}
			$fetch->redirect = $redirect;

		}
		echo json_encode($fetch);
		break;

	case 'salir':
		//Limpiamos las variables de sesión   
		session_unset();
		//Destruìmos la sesión
		session_destroy();
		//Redireccionamos al login
		header("Location: ../index.php");

		break;

	case 'listar_medicos_derivacion':
		$rspta = $usuario->listar();
		$data = array();
		while ($reg = $rspta->fetch_object()) {
			if ($reg->condicion && $reg->idusuario != $_SESSION['idusuario']) {
				$data[] = array(
					"idusuario" => $reg->idusuario,
					"nombre" => $reg->nombre . ' ' . $reg->apaterno,
					"especialidad" => $reg->especialidad
				);
			}
		}
		echo json_encode($data);
		break;
}
?>