import { NextRequest, NextResponse } from 'next/server'
import { getDb } from '@/server/db'
import { getUserIdFromRequest } from '../../../_helpers/session'

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

/**
 * 取得使用者在頻道中的管理資訊（僅限頻道 Mod 和實況主）
 * GET /api/rooms/[id]/user-admin?userId=xxx
 */
export async function GET(req: NextRequest, ctx: { params: { id: string } }) {
    try {
        const roomId = String(ctx?.params?.id ?? '').trim()
        if (!roomId) return json({ ok: false, error: 'BAD_REQUEST' }, { status: 400 })

        const currentUserId = await getUserIdFromRequest(req)
        if (!currentUserId) {
            return json({ ok: false, error: 'UNAUTHORIZED' }, { status: 401 })
        }

        const { searchParams } = new URL(req.url)
        const targetUserId = searchParams.get('userId')
        if (!targetUserId) {
            return json({ ok: false, error: 'BAD_REQUEST', message: '缺少 userId' }, { status: 400 })
        }

        const db = await getDb()

        // 檢查目前使用者是否為頻道 Mod 或實況主
        const stream = await db.get<{ userId: string }>(
            `SELECT room_id AS userId FROM room_streams WHERE room_id = ?`,
            [roomId]
        )

        if (!stream) {
            return json({ ok: false, error: 'NOT_FOUND', message: '頻道不存在' }, { status: 404 })
        }

        const isStreamer = stream.userId === currentUserId
        // 檢查是否為 Mod
        const mod = await db.get<{ userId: string }>(
            `SELECT user_id AS userId FROM room_mods WHERE room_id = ? AND user_id = ?`,
            [roomId, currentUserId]
        )
        const isModerator = isStreamer || !!mod

        if (!isModerator) {
            return json({ ok: false, error: 'FORBIDDEN', message: '僅限頻道 Mod 和實況主' }, { status: 403 })
        }

        // 取得使用者基本資訊
        const user = await db.get<{
            id: string
            displayName: string
            avatar: string | null
            createdAt: string
        }>(
            `SELECT user_id AS id, display_name AS displayName, avatar_url AS avatar,
                    (created_at * 1000) AS createdAt FROM users WHERE user_id = ?`,
            [targetUserId]
        )

        if (!user) {
            return json({ ok: false, error: 'NOT_FOUND', message: '使用者不存在' }, { status: 404 })
        }

        // 聊天訊息不再入庫，管理後台無歷史記錄可查
        const chatMessages: Array<{ id: string; text: string; createdAt: string }> = []

        // 取得使用者在該頻道的禁言記錄
        const banHistory = await db.all<{
            id: number
            reason: string | null
            durationMs: number | null
            bannedAt: number
            bannedBy: string
            expiresAt: number | null
        }>(
            `SELECT rowid AS id, reason, duration_ms AS durationMs, banned_at AS bannedAt,
                    banned_by AS bannedBy, expires_at AS expiresAt
             FROM room_bans 
             WHERE room_id = ? AND user_id = ?
             ORDER BY banned_at DESC`,
            [roomId, targetUserId]
        )

        // TODO: 取得管理留言（需要創建 room_admin_notes 表）
        const adminNotes: Array<{
            id: string
            note: string
            createdAt: string
            createdBy: string
        }> = []

        // 檢查目標使用者是否為 Mod
        const targetMod = await db.get<{ userId: string; addedBy: string; addedAt: number }>(
            `SELECT user_id AS userId, added_by AS addedBy, added_at AS addedAt
             FROM room_mods WHERE room_id = ? AND user_id = ?`,
            [roomId, targetUserId]
        )

        return json({
            ok: true,
            data: {
                userId: user.id,
                userName: user.displayName,
                avatarUrl: user.avatar,
                createdAt: user.createdAt,
                isMod: !!targetMod,
                chatMessages: chatMessages.map((msg) => ({
                    id: msg.id,
                    text: msg.text,
                    createdAt: msg.createdAt,
                })),
                banHistory: banHistory.map((ban) => ({
                    id: String(ban.id),
                    reason: ban.reason || undefined,
                    durationMs: ban.durationMs || undefined,
                    bannedAt: new Date(ban.bannedAt * 1000).toISOString(),
                    bannedBy: ban.bannedBy,
                    expiresAt: ban.expiresAt ?? undefined,
                    isPermanent: ban.expiresAt === null,
                })),
                adminNotes,
            },
        })
    } catch (error: any) {
        console.error('Failed to fetch user admin info:', error)
        return json({ ok: false, error: 'INTERNAL_ERROR', message: error?.message || '操作失敗' }, { status: 500 })
    }
}

