import { Hono } from 'hono' import { db, schema } from '../db/index.js' import { eq } from 'drizzle-orm' import { joinQueue, leaveQueue, getQueueSize, getQueueSnapshot } from '../engine/queue.js' export const queueRouter = new Hono() // Get queue status queueRouter.get('/status', (c) => { return c.json({ waiting: getQueueSize(), queue: getQueueSnapshot(), }) }) // Join the queue — blocks until matched, then returns fightId queueRouter.post('/join/:botId', async (c) => { const botId = c.req.param('botId') const botRows = await db.select({ id: schema.bots.id, name: schema.bots.name }) .from(schema.bots) .where(eq(schema.bots.id, botId)) .limit(1) if (botRows.length === 0) { return c.json({ error: 'Bot not found.' }, 404) } try { const fightId = await joinQueue(botId) return c.json({ fightId, message: 'Matched! Fight starting.' }) } catch (err) { const message = err instanceof Error ? err.message : 'Queue error' return c.json({ error: message }, 500) } }) // Leave the queue queueRouter.post('/leave/:botId', (c) => { const botId = c.req.param('botId') const left = leaveQueue(botId) return c.json({ left }) })