<?php
if (!defined('BASEPATH')) {
    http_response_code(403);
    die(json_encode(["success" => false, "message" => "Acceso directo no permitido"]));
}

switch ($tipo) {
    case 'login':
        $username = isset($datapost['username']) ? mysqli_real_escape_string($conn, $datapost['username']) : '';
        $password = isset($datapost['password']) ? $datapost['password'] : '';

        if (empty($username) || empty($password)) {
            sendResponse(false, "Usuario y contraseña son requeridos");
        }

        $sql = "SELECT u.*, p.nombre as perfil_nombre
                FROM usuarios u
                INNER JOIN perfiles p ON u.perfil_id = p.id
                WHERE u.username = '$username' AND u.activo = 1";
        $result = mysqli_query($conn, $sql);

        if ($result && mysqli_num_rows($result) > 0) {
            $usuario = mysqli_fetch_assoc($result);

            if (password_verify($password, $usuario['password'])) {
                // Actualizar ultimo acceso
                mysqli_query($conn, "UPDATE usuarios SET ultimo_acceso = NOW() WHERE id = " . $usuario['id']);

                // Obtener permisos del usuario
                $sqlPermisos = "SELECT per.codigo, per.modulo
                                FROM permisos per
                                INNER JOIN perfil_permisos pp ON per.id = pp.permiso_id
                                WHERE pp.perfil_id = " . $usuario['perfil_id'] . " AND per.activo = 1";
                $resultPermisos = mysqli_query($conn, $sqlPermisos);

                $permisos = [];
                while ($row = mysqli_fetch_assoc($resultPermisos)) {
                    $permisos[] = $row['codigo'];
                }

                // Generar token simple (en produccion usar JWT)
                $token = bin2hex(random_bytes(32));

                sendResponse(true, "Login exitoso", [
                    'id' => (int)$usuario['id'],
                    'username' => $usuario['username'],
                    'nombre' => $usuario['nombre'],
                    'email' => $usuario['email'],
                    'perfil_id' => (int)$usuario['perfil_id'],
                    'perfil' => $usuario['perfil_nombre'],
                    'permisos' => $permisos,
                    'token' => $token
                ]);
            } else {
                sendResponse(false, "Contraseña incorrecta");
            }
        } else {
            sendResponse(false, "Usuario no encontrado");
        }
        break;

    case 'verificarToken':
        // En una implementacion real, verificar el token JWT
        $token = isset($datapost['token']) ? $datapost['token'] : '';

        if (empty($token)) {
            sendResponse(false, "Token no proporcionado");
        }

        // Por ahora, retornar exito (implementar verificacion real con JWT)
        sendResponse(true, "Token valido");
        break;

    case 'cambiarPassword':
        $usuario_id = isset($datapost['usuario_id']) ? (int)$datapost['usuario_id'] : 0;
        $password_actual = isset($datapost['password_actual']) ? $datapost['password_actual'] : '';
        $password_nuevo = isset($datapost['password_nuevo']) ? $datapost['password_nuevo'] : '';

        if ($usuario_id <= 0 || empty($password_actual) || empty($password_nuevo)) {
            sendResponse(false, "Datos incompletos");
        }

        // Verificar password actual
        $sql = "SELECT password FROM usuarios WHERE id = $usuario_id AND activo = 1";
        $result = mysqli_query($conn, $sql);

        if ($result && mysqli_num_rows($result) > 0) {
            $usuario = mysqli_fetch_assoc($result);

            if (password_verify($password_actual, $usuario['password'])) {
                $password_hash = password_hash($password_nuevo, PASSWORD_DEFAULT);
                $updateSql = "UPDATE usuarios SET password = '$password_hash', updated_at = NOW() WHERE id = $usuario_id";

                if (mysqli_query($conn, $updateSql)) {
                    sendResponse(true, "Contraseña actualizada correctamente");
                } else {
                    sendResponse(false, "Error al actualizar contraseña");
                }
            } else {
                sendResponse(false, "Contraseña actual incorrecta");
            }
        } else {
            sendResponse(false, "Usuario no encontrado");
        }
        break;

    default:
        sendResponse(false, "Operacion no valida en Auth");
        break;
}
