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

export const runtime = 'nodejs'

export async function POST(request: NextRequest) {
    try {
        const userId = await getUserIdFromRequest(request)

        if (!userId) {
            return NextResponse.json(
                { ok: false, message: 'Unauthorized' },
                { status: 401 }
            )
        }

        const formData = await request.formData()
        const file = formData.get('avatar') as File | null

        if (!file) {
            return NextResponse.json(
                { ok: false, message: 'No file provided' },
                { status: 400 }
            )
        }

        // 驗證檔案類型
        if (!file.type.startsWith('image/')) {
            return NextResponse.json(
                { ok: false, message: 'Invalid file type. Only images are allowed.' },
                { status: 400 }
            )
        }

        // 驗證檔案大小（2MB）
        const maxSize = 2 * 1024 * 1024 // 2MB
        if (file.size > maxSize) {
            return NextResponse.json(
                { ok: false, message: 'File size exceeds 2MB limit' },
                { status: 400 }
            )
        }

        // 將檔案轉換為 base64（簡單實作，實際生產環境應該上傳到雲端儲存）
        const arrayBuffer = await file.arrayBuffer()
        const buffer = Buffer.from(arrayBuffer)
        const base64 = buffer.toString('base64')
        const dataUrl = `data:${file.type};base64,${base64}`

        // 更新資料庫
        const db = await getDb()
        await db.run(
            `UPDATE users SET avatar_url = ?, updated_at = CAST(strftime('%s','now') AS INTEGER) WHERE user_id = ?`,
            [dataUrl, userId]
        )

        return NextResponse.json({
            ok: true,
            avatarUrl: dataUrl,
        })
    } catch (error: any) {
        console.error('Failed to upload avatar:', error)
        return NextResponse.json(
            { ok: false, message: error?.message || 'Failed to upload avatar' },
            { status: 500 }
        )
    }
}

