import { NextRequest, NextResponse } from 'next/server';
import { getDb } from '@/lib/db';
import { checkRateLimit } from '@/lib/rate-limit';
import { parseBody, trackClickSchema } from '@/lib/validation';

export async function POST(req: NextRequest) {
  const limit = checkRateLimit(req, 'track', 30, 60);
  if (!limit.allowed) {
    return NextResponse.json({ tracked: false }, { status: 429, headers: { 'Retry-After': String(limit.retryAfter) } });
  }

  const parsed = await parseBody(req, trackClickSchema);
  if (!parsed.success) return parsed.response;

  const { sessionCode, restaurantId, clickType } = parsed.data;

  try {

    const db = getDb();
    const session = db.prepare('SELECT id FROM sessions WHERE code = ?').get(sessionCode) as { id: number } | undefined;
    if (!session) {
      return NextResponse.json({ tracked: false });
    }

    db.prepare(
      `INSERT INTO outbound_clicks (session_id, restaurant_id, click_type) VALUES (?, ?, ?)`
    ).run(session.id, restaurantId ?? null, clickType);

    return NextResponse.json({ tracked: true });
  } catch (e) {
    console.error('Outbound-Click-Tracking fehlgeschlagen:', e);
    return NextResponse.json({ tracked: false });
  }
}
