import { NextRequest, NextResponse } from 'next/server';
import { verifyMember } from '@/lib/auth-middleware';
import { getFirebaseAdmin } from '@/lib/firebase-admin';
import { getFirestore, FieldValue } from 'firebase-admin/firestore';

// POST /api/admin/fcm-token
// body: { token: string }
// 인증된 사용자의 fcmTokens 배열에 토큰 추가
export async function POST(req: NextRequest) {
  const authResult = await verifyMember(req);
  if (authResult instanceof NextResponse) return authResult;

  let body: { token?: string };
  try {
    body = await req.json();
  } catch {
    return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 });
  }

  const { token } = body;

  if (!token || typeof token !== 'string' || token.trim() === '') {
    return NextResponse.json({ error: 'token must be a non-empty string' }, { status: 400 });
  }

  getFirebaseAdmin();
  const db = getFirestore();

  await db.collection('users').doc(authResult.uid).set(
    { fcmTokens: FieldValue.arrayUnion(token) },
    { merge: true }
  );

  return NextResponse.json({ success: true });
}

// DELETE /api/admin/fcm-token
// body: { token: string }
// 인증된 사용자의 fcmTokens 배열에서 토큰 제거
export async function DELETE(req: NextRequest) {
  const authResult = await verifyMember(req);
  if (authResult instanceof NextResponse) return authResult;

  let body: { token?: string };
  try {
    body = await req.json();
  } catch {
    return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 });
  }

  const { token } = body;

  if (!token || typeof token !== 'string' || token.trim() === '') {
    return NextResponse.json({ error: 'token must be a non-empty string' }, { status: 400 });
  }

  getFirebaseAdmin();
  const db = getFirestore();

  await db.collection('users').doc(authResult.uid).update({
    fcmTokens: FieldValue.arrayRemove(token),
  });

  return NextResponse.json({ success: true });
}
