import { NextRequest, NextResponse } from 'next/server'
import { getDb } from '@/server/db'
import { getUserIdFromRequest } from '@/app/api/_helpers/session'

export const runtime = 'nodejs'

function json(data: unknown, init?: ResponseInit) {
    return NextResponse.json(data, init)
}

export async function POST(request: NextRequest, ctx: { params: { id: string } }) {
    const roomId = String(ctx?.params?.id ?? '').trim()
    if (!roomId) return json({ ok: false, error: 'BAD_REQUEST' }, { status: 400 })

    const userId = await getUserIdFromRequest(request)
    if (!userId) {
        return json({ ok: false, error: 'UNAUTHORIZED', message: '請先登入' }, { status: 401 })
    }

    const db = await getDb()

    const stream = await db.get<{ room_id: string }>(`SELECT room_id FROM room_streams WHERE room_id = ?`, [roomId])
    if (!stream) return json({ ok: false, error: 'NOT_FOUND' }, { status: 404 })

    const nowSec = Math.floor(Date.now() / 1000)

    const exists = await db.get<{ c: number }>(
        `SELECT 1 as c FROM room_stream_likes WHERE room_id = ? AND user_id = ? LIMIT 1`,
        [roomId, userId]
    )

    let isLiked = false
    if (exists?.c) {
        await db.run(`DELETE FROM room_stream_likes WHERE room_id = ? AND user_id = ?`, [roomId, userId])
        isLiked = false
    } else {
        await db.run(`INSERT OR IGNORE INTO room_stream_likes (room_id, user_id, created_at) VALUES (?, ?, ?)`, [
            roomId,
            userId,
            nowSec,
        ])
        isLiked = true
    }

    const c = await db.get<{ likes: number }>(
        `SELECT COUNT(1) as likes FROM room_stream_likes WHERE room_id = ?`,
        [roomId]
    )
    const likes = Number(c?.likes ?? 0)

    return json({ ok: true, data: { roomId, isLiked, likes } })
}


