import { NextRequest, NextResponse } from 'next/server'; import { logger } from '@/lib/logger'; import { getStalwartCredentials } from '@/lib/stalwart/credentials'; import { listResources, createResource, getBookingsForEvent } from '@/lib/resources/client'; export async function GET(request: NextRequest) { try { const creds = await getStalwartCredentials(request); if (!creds) { return NextResponse.json({ error: 'Not authenticated' }, { status: 401 }); } const { searchParams } = new URL(request.url); const type = searchParams.get('type') || undefined; const eventId = searchParams.get('eventId') || undefined; if (eventId) { const bookings = await getBookingsForEvent(eventId); return NextResponse.json({ bookings }); } const resources = await listResources(creds.username, type); return NextResponse.json({ resources }); } catch (error) { logger.error('Resources list error', { error: error instanceof Error ? error.message : 'Unknown' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function POST(request: NextRequest) { try { const creds = await getStalwartCredentials(request); if (!creds) { return NextResponse.json({ error: 'Not authenticated' }, { status: 401 }); } const body = await request.json(); const { name, type, location, capacity, description, contactEmail, metadata } = body; if (!name || !type || !['room', 'vehicle', 'equipment', 'other'].includes(type)) { return NextResponse.json({ error: 'Name and valid type are required' }, { status: 400 }); } const resource = await createResource(creds.username, { name, type, location, capacity: capacity ? Number(capacity) : undefined, description, contactEmail, metadata, }); return NextResponse.json({ resource }, { status: 201 }); } catch (error) { logger.error('Resource create error', { error: error instanceof Error ? error.message : 'Unknown' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }