import { NextRequest, NextResponse } from 'next/server';
import { db, schema } from '@/lib/db';
import { eq } from 'drizzle-orm';
import { getSession } from '@/lib/auth';
import { createInvoice } from '@/lib/fatture-in-cloud';

export const runtime = 'nodejs';

async function requireAdmin(request: NextRequest) {
  const accessToken = request.cookies.get('scriba.access_token')?.value;
  const session = await getSession(accessToken);
  if (!session) return null;
  const user = await db.query.users.findFirst({ where: eq(schema.users.id, session.user.id) });
  if (!user || user.role !== 'admin') return null;
  return user;
}

/**
 * POST /api/admin/fatture-in-cloud/test-invoice
 * Creates a real €1.00 test invoice in FIC addressed to the calling admin.
 * Use this to verify the full invoice-creation flow end-to-end.
 */
export async function POST(request: NextRequest) {
  const user = await requireAdmin(request);
  if (!user) return NextResponse.json({ error: 'Forbidden' }, { status: 403 });

  try {
    const today = new Date().toISOString().slice(0, 10);

    const docId = await createInvoice({
      date: today,
      entity: {
        name: user.name ?? user.email,
        email: user.email,
      },
      items: [
        {
          name: 'Scriba – Test Invoice',
          qty: 1,
          gross_price: 1.00,
          vat: { id: 0 },
        },
      ],
      amountCents: 100,
      notes: 'Test invoice issued from Scriba admin panel. Safe to delete.',
    });

    return NextResponse.json({ ok: true, docId });
  } catch (err) {
    return NextResponse.json(
      { ok: false, error: err instanceof Error ? err.message : 'Unknown error' },
      { status: 500 },
    );
  }
}
