import { redirect } from 'next/navigation' import { AdminBreadcrumb } from '@/components/admin/admin-breadcrumb' import { canAccess, getAdminContext, PERMS } from '@/lib/permissions' import { prisma } from '@/lib/prisma' import { loadRoom } from '../../_lib/load-room' import { FurniClient } from './furni-client' export default async function RoomFurniPage({ params, }: { params: Promise<{ id: string; locale: string }> }) { const { id } = await params const { session, permissions } = await getAdminContext() if (!canAccess(permissions, PERMS.ROOMS_VIEW, session.user.rank)) redirect('/admin') const room = await loadRoom(id) // Load items in this room. items.item_id → items_base.id const items = await prisma.item.findMany({ where: { roomId: room.id }, orderBy: { id: 'desc' }, }) // Resolve item bases const baseIds = Array.from(new Set(items.map((i) => i.itemId))) const bases = baseIds.length ? await prisma.itemsBase.findMany({ where: { id: { in: baseIds } }, select: { id: true, itemName: true, publicName: true, type: true }, }) : [] const baseMap = new Map(bases.map((b) => [b.id, b])) // Resolve owner usernames const userIds = Array.from(new Set(items.map((i) => i.userId).filter((u) => u > 0))) const users = userIds.length ? await prisma.user.findMany({ where: { id: { in: userIds } }, select: { id: true, username: true }, }) : [] const userMap = new Map(users.map((u) => [u.id, u.username])) const rows = items.map((i) => { const base = baseMap.get(i.itemId) return { id: i.id, baseId: i.itemId, name: base?.publicName || base?.itemName || `#${i.itemId}`, itemName: base?.itemName ?? '', type: base?.type ?? '?', x: i.x, y: i.y, z: i.z, rot: i.rot, wallPos: i.wallPos, userId: i.userId, ownerUsername: userMap.get(i.userId) ?? null, extraData: i.extraData, } }) return (