/**
 * SEO Campaigns API Route
 * Proxies campaign management requests to the LangGraph Python service
 */

import { NextRequest, NextResponse } from 'next/server';
import { AuthMiddleware } from '@/lib/auth';

const LANGGRAPH_URL = process.env.LANGGRAPH_URL || 'http://127.0.0.1:8001';

export async function GET(request: NextRequest) {
  try {
    // Require admin role
    const authResult = await AuthMiddleware.requireRole(request, 'ADMIN');
    if (authResult instanceof NextResponse) {
      return authResult;
    }

    const { searchParams } = new URL(request.url);
    const status = searchParams.get('status');
    const siteId = searchParams.get('site_id');

    const params = new URLSearchParams();
    if (status) params.set('status', status);
    if (siteId) params.set('site_id', siteId);

    const res = await fetch(`${LANGGRAPH_URL}/api/campaigns?${params}`);

    if (!res.ok) {
      return NextResponse.json(
        { error: 'LangGraph service unavailable', campaigns: [] },
        { status: res.status }
      );
    }

    const data = await res.json();
    return NextResponse.json(data);
  } catch (error) {
    console.error('[API] Campaigns fetch error:', error);
    return NextResponse.json(
      { error: 'Failed to fetch campaigns', campaigns: [] },
      { status: 500 }
    );
  }
}

export async function POST(request: NextRequest) {
  try {
    // Require admin role
    const authResult = await AuthMiddleware.requireRole(request, 'ADMIN');
    if (authResult instanceof NextResponse) {
      return authResult;
    }

    const body = await request.json();
    const { site_id, template, config } = body;

    if (!site_id) {
      return NextResponse.json(
        { error: 'site_id is required' },
        { status: 400 }
      );
    }

    const res = await fetch(`${LANGGRAPH_URL}/api/campaigns/start`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        site_id,
        template: template || 'zero_click_authority',
        config,
      }),
    });

    if (!res.ok) {
      const errorData = await res.json().catch(() => ({}));
      return NextResponse.json(
        { error: errorData.detail || 'Failed to start campaign' },
        { status: res.status }
      );
    }

    const data = await res.json();
    return NextResponse.json(data, { status: 201 });
  } catch (error) {
    console.error('[API] Campaign start error:', error);
    return NextResponse.json(
      { error: 'Failed to start campaign' },
      { status: 500 }
    );
  }
}
