import { NextResponse } from 'next/server'
import { getDb } from '@/server/db'
import { newUserId } from '@/server/userIdUtils'

export const runtime = 'nodejs'

function json(data: unknown, init?: ResponseInit) {
    return NextResponse.json(data, init)
}

export async function GET() {
    const db = await getDb()
    const rows = await db.all(
        `SELECT u.user_id AS id, u.display_name AS displayName, u.avatar_url AS avatar, u.banner_url AS banner,
                (SELECT COUNT(1) FROM user_actions f WHERE f.target_id = u.user_id AND f.action_type = 'follow') AS followersCount,
                0 AS totalViewsCount,
                'none' AS vipLevel, (u.created_at * 1000) AS createdAt
         FROM users u
         ORDER BY u.created_at DESC`
    )
    return json({ ok: true, data: rows })
}

export async function POST(req: Request) {
    const body = await req.json().catch(() => ({}))
    const slug = String(body?.id ?? '').trim() || `u_${Date.now()}`
    const displayName = String(body?.displayName ?? '').trim() || ''
    const avatar = body?.avatar ? String(body.avatar) : null
    const banner = body?.banner ? String(body.banner) : null
    const db = await getDb()
    const nowSec = Math.floor(Date.now() / 1000)
    const userId = newUserId()
    await db.run(
        `INSERT INTO users (user_id, display_id, display_name, account, avatar_url, banner_url, created_at, updated_at)
         VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
        [userId, slug, displayName || slug, slug, avatar, banner, nowSec, nowSec]
    )
    const user = await db.get(
        `SELECT u.user_id AS id, u.display_name AS displayName, u.avatar_url AS avatar, u.banner_url AS banner,
                (SELECT COUNT(1) FROM user_actions f WHERE f.target_id = u.user_id AND f.action_type = 'follow') AS followersCount,
                0 AS totalViewsCount, 'none' AS vipLevel, (u.created_at * 1000) AS createdAt
         FROM users u WHERE u.user_id = ?`,
        [userId]
    )
    return json({ ok: true, data: user }, { status: 201 })
}


