/**
 * Experiments API proxy — forwards requests to platform-service.
 *
 * /api/experiments/* → platform-service /api/ab-testing/experiments/*
 */

import { NextRequest, NextResponse } from 'next/server';
import { getCurrentUserFromRequest } from '@/lib/auth-server';
import { logError } from '@/lib/logger';

const PLATFORM_URL = process.env.PLATFORM_SERVICE_URL || 'http://localhost:4003';

async function proxy(req: NextRequest, { params }: { params: Promise<{ path: string[] }> }) {
  try {
    const caller = await getCurrentUserFromRequest(req);
    if (!caller) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
    const { path } = await params;
    const targetPath = `/api/ab-testing/experiments/${path.join('/')}`;
    const qs = new URL(req.url).search;
    const headers: Record<string, string> = {
      'Content-Type': 'application/json',
      'x-request-id': req.headers.get('x-request-id') || crypto.randomUUID(),
      'x-user-id': caller.id,
      'x-product-id': req.headers.get('x-product-id') || process.env.PRODUCT_ID || 'lysnrai',
    };
    const fetchOptions: RequestInit = { method: req.method, headers };
    if (req.method !== 'GET' && req.method !== 'HEAD') fetchOptions.body = await req.text();
    const res = await fetch(`${PLATFORM_URL}${targetPath}${qs}`, fetchOptions);
    const data = await res.json().catch(() => null);
    return NextResponse.json(data ?? { error: res.statusText }, { status: res.status });
  } catch (error) {
    logError('Experiments proxy error', error);
    return NextResponse.json({ error: 'Service unavailable' }, { status: 502 });
  }
}

export async function GET(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
  return proxy(req, ctx);
}
export async function POST(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
  return proxy(req, ctx);
}
export async function PATCH(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
  return proxy(req, ctx);
}
export async function DELETE(req: NextRequest, ctx: { params: Promise<{ path: string[] }> }) {
  return proxy(req, ctx);
}
