import { NextRequest, NextResponse } from 'next/server';
import { getAuth } from 'firebase-admin/auth';
import { getFirebaseAdmin } from '@/lib/firebase-admin';
import { ADMIN_EMAILS } from '@/lib/constants';

async function verifyAdmin(req: NextRequest): Promise<{ email: string } | NextResponse> {
    const authHeader = req.headers.get('Authorization');
    if (!authHeader?.startsWith('Bearer ')) {
        return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }
    const idToken = authHeader.split('Bearer ')[1];
    getFirebaseAdmin();
    let userEmail: string | undefined;
    try {
        const decoded = await getAuth().verifyIdToken(idToken);
        userEmail = decoded.email;
    } catch {
        return NextResponse.json({ error: 'Unauthorized: Invalid token' }, { status: 401 });
    }
    if (!userEmail || !ADMIN_EMAILS.includes(userEmail)) {
        return NextResponse.json({ error: 'Forbidden: Admin only' }, { status: 403 });
    }
    return { email: userEmail };
}

// GET /api/admin/insurance/terms/[productId]/summaries
// Level 1 + Level 2 요약 목록 + 청크 수 반환
export async function GET(
    req: NextRequest,
    { params }: { params: Promise<{ productId: string }> }
) {
    try {
        const authResult = await verifyAdmin(req);
        if (authResult instanceof NextResponse) return authResult;

        const { productId } = await params;
        if (!productId) {
            return NextResponse.json({ error: 'productId is required' }, { status: 400 });
        }

        const db = getFirebaseAdmin().firestore();

        // 요약 조회 (level 1 + 2)
        const summarySnapshot = await db
            .collection('insurance_summaries')
            .where('productId', '==', productId)
            .orderBy('level', 'asc')
            .get();

        const summaries = summarySnapshot.docs.map((doc: any) => {
            const data = doc.data();
            return {
                id: doc.id,
                productId: data.productId ?? '',
                companyId: data.companyId ?? '',
                level: data.level as 1 | 2 | 3,
                sectionTitle: data.sectionTitle,
                content: data.content ?? '',
                pageRange: data.pageRange,
                createdAt: data.createdAt?.toDate?.()?.toISOString() ?? null,
                updatedAt: data.updatedAt?.toDate?.()?.toISOString() ?? null,
            };
        });

        // 청크 수 조회
        const chunksSnapshot = await db
            .collection('insurance_chunks')
            .where('productId', '==', productId)
            .count()
            .get();

        const chunksCount = chunksSnapshot.data().count;

        return NextResponse.json({ summaries, chunksCount });
    } catch (error: any) {
        console.error('GET summaries error:', error);
        return NextResponse.json({ error: 'Internal Server Error', message: error.message }, { status: 500 });
    }
}
