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]/chunks?page=N
// 특정 페이지의 청크 조회
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 { searchParams } = new URL(req.url);
        const pageParam = searchParams.get('page');
        const pageNumber = pageParam ? parseInt(pageParam, 10) : null;

        if (pageNumber === null || isNaN(pageNumber) || pageNumber < 1) {
            return NextResponse.json({ error: 'page query parameter must be a positive integer' }, { status: 400 });
        }

        const db = getFirebaseAdmin().firestore();

        const snapshot = await db
            .collection('insurance_chunks')
            .where('productId', '==', productId)
            .where('pageNumber', '==', pageNumber)
            .orderBy('createdAt', 'asc')
            .get();

        const chunks = snapshot.docs.map((doc: any) => {
            const data = doc.data();
            return {
                id: doc.id,
                productId: data.productId,
                companyId: data.companyId,
                companyName: data.companyName,
                productName: data.productName,
                pageNumber: data.pageNumber,
                chunkText: data.chunkText,
                coverageNames: data.coverageNames ?? [],
                sourceType: data.sourceType,
                effectiveDate: data.effectiveDate,
            };
        });

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