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

switch ($tipo) {
    case 'getUsuarios':
        $sql = "SELECT u.id, u.username, u.nombre, u.email, u.telefono, u.perfil_id,
                       u.activo, u.ultimo_acceso, u.created_at,
                       p.nombre as perfil_nombre
                FROM usuarios u
                INNER JOIN perfiles p ON u.perfil_id = p.id
                WHERE u.activo = 1
                ORDER BY u.nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $usuarios = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $usuarios[] = [
                    'id' => (int)$row['id'],
                    'username' => $row['username'],
                    'nombre' => $row['nombre'],
                    'email' => $row['email'],
                    'telefono' => $row['telefono'],
                    'perfil_id' => (int)$row['perfil_id'],
                    'perfil' => $row['perfil_nombre'],
                    'activo' => (bool)$row['activo'],
                    'ultimo_acceso' => $row['ultimo_acceso'],
                    'created_at' => $row['created_at']
                ];
            }
            sendResponse(true, "Usuarios obtenidos", $usuarios);
        } else {
            sendResponse(false, "Error al obtener usuarios: " . mysqli_error($conn));
        }
        break;

    case 'getUsuario':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de usuario no valido");
        }

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

        if ($result && mysqli_num_rows($result) > 0) {
            $row = mysqli_fetch_assoc($result);
            $usuario = [
                'id' => (int)$row['id'],
                'username' => $row['username'],
                'nombre' => $row['nombre'],
                'email' => $row['email'],
                'telefono' => $row['telefono'],
                'perfil_id' => (int)$row['perfil_id'],
                'perfil' => $row['perfil_nombre'],
                'activo' => (bool)$row['activo'],
                'ultimo_acceso' => $row['ultimo_acceso'],
                'created_at' => $row['created_at']
            ];
            sendResponse(true, "Usuario encontrado", $usuario);
        } else {
            sendResponse(false, "Usuario no encontrado");
        }
        break;

    case 'crearUsuario':
        $username = isset($datapost['username']) ? mysqli_real_escape_string($conn, $datapost['username']) : '';
        $password = isset($datapost['password']) ? $datapost['password'] : '';
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';
        $email = isset($datapost['email']) ? mysqli_real_escape_string($conn, $datapost['email']) : '';
        $telefono = isset($datapost['telefono']) ? mysqli_real_escape_string($conn, $datapost['telefono']) : '';
        $perfil_id = isset($datapost['perfil_id']) ? (int)$datapost['perfil_id'] : 0;

        if (empty($username) || empty($password) || empty($nombre) || $perfil_id <= 0) {
            sendResponse(false, "Datos incompletos. Username, password, nombre y perfil son requeridos");
        }

        // Verificar que no exista el username
        $checkSql = "SELECT id FROM usuarios WHERE username = '$username'";
        $checkResult = mysqli_query($conn, $checkSql);
        if (mysqli_num_rows($checkResult) > 0) {
            sendResponse(false, "El nombre de usuario ya existe");
        }

        $password_hash = password_hash($password, PASSWORD_DEFAULT);

        $sql = "INSERT INTO usuarios (username, password, nombre, email, telefono, perfil_id)
                VALUES ('$username', '$password_hash', '$nombre', '$email', '$telefono', $perfil_id)";

        if (mysqli_query($conn, $sql)) {
            $nuevoId = mysqli_insert_id($conn);
            sendResponse(true, "Usuario creado correctamente", ['id' => $nuevoId]);
        } else {
            sendResponse(false, "Error al crear usuario: " . mysqli_error($conn));
        }
        break;

    case 'actualizarUsuario':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;
        $username = isset($datapost['username']) ? mysqli_real_escape_string($conn, $datapost['username']) : '';
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';
        $email = isset($datapost['email']) ? mysqli_real_escape_string($conn, $datapost['email']) : '';
        $telefono = isset($datapost['telefono']) ? mysqli_real_escape_string($conn, $datapost['telefono']) : '';
        $perfil_id = isset($datapost['perfil_id']) ? (int)$datapost['perfil_id'] : 0;
        $password = isset($datapost['password']) ? $datapost['password'] : '';

        if ($id <= 0 || empty($username) || empty($nombre) || $perfil_id <= 0) {
            sendResponse(false, "Datos incompletos");
        }

        // Verificar que no exista el username en otro usuario
        $checkSql = "SELECT id FROM usuarios WHERE username = '$username' AND id != $id";
        $checkResult = mysqli_query($conn, $checkSql);
        if (mysqli_num_rows($checkResult) > 0) {
            sendResponse(false, "El nombre de usuario ya existe");
        }

        $sql = "UPDATE usuarios SET
                username = '$username',
                nombre = '$nombre',
                email = '$email',
                telefono = '$telefono',
                perfil_id = $perfil_id,
                updated_at = NOW()";

        // Si se proporciona nueva contraseña, actualizarla
        if (!empty($password)) {
            $password_hash = password_hash($password, PASSWORD_DEFAULT);
            $sql .= ", password = '$password_hash'";
        }

        $sql .= " WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            sendResponse(true, "Usuario actualizado correctamente");
        } else {
            sendResponse(false, "Error al actualizar usuario: " . mysqli_error($conn));
        }
        break;

    case 'eliminarUsuario':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de usuario no valido");
        }

        // Verificar que no sea el unico administrador
        $checkSql = "SELECT COUNT(*) as total FROM usuarios u
                     INNER JOIN perfiles p ON u.perfil_id = p.id
                     WHERE p.nombre = 'Administrador' AND u.activo = 1 AND u.id != $id";
        $checkResult = mysqli_query($conn, $checkSql);
        $row = mysqli_fetch_assoc($checkResult);

        // Verificar si el usuario a eliminar es administrador
        $userSql = "SELECT p.nombre as perfil FROM usuarios u
                    INNER JOIN perfiles p ON u.perfil_id = p.id
                    WHERE u.id = $id";
        $userResult = mysqli_query($conn, $userSql);
        $userRow = mysqli_fetch_assoc($userResult);

        if ($userRow['perfil'] == 'Administrador' && $row['total'] == 0) {
            sendResponse(false, "No se puede eliminar el unico administrador del sistema");
        }

        // Soft delete
        $sql = "UPDATE usuarios SET activo = 0, updated_at = NOW() WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            sendResponse(true, "Usuario eliminado correctamente");
        } else {
            sendResponse(false, "Error al eliminar usuario: " . mysqli_error($conn));
        }
        break;

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