import { NextRequest, NextResponse } from 'next/server';
import { getSession } from '@/lib/auth';
import { detectStackViaEngine } from '@/lib/repo-manifests';
import type { RepoManifest } from '@/lib/repo-manifests';

export async function POST(request: NextRequest) {
  const session = await getSession(request.cookies.get('scriba.access_token')?.value);
  if (!session) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });

  let body: { sourceLanguage?: string; manifests?: RepoManifest[]; filePaths?: string[] };
  try {
    body = await request.json();
  } catch {
    return NextResponse.json({ error: 'Invalid JSON' }, { status: 400 });
  }

  const { sourceLanguage, manifests = [], filePaths = [] } = body;
  if (!sourceLanguage) return NextResponse.json({ error: 'sourceLanguage is required' }, { status: 400 });

  if (manifests.length === 0) {
    return NextResponse.json({ framework: null, version: null, signals: [] });
  }

  const stack = await detectStackViaEngine(sourceLanguage, manifests, filePaths);
  if (!stack) {
    return NextResponse.json(
      { error: 'Scriba Engine unavailable' },
      { status: 503 },
    );
  }

  return NextResponse.json(stack);
}
