import { NextRequest, NextResponse } from 'next/server';
import { getPersonajes, savePersonajes, getIdeaMotriz } from '@/lib/file-service';

export async function GET(
  request: NextRequest,
  { params }: { params: Promise<{ slug: string }> }
) {
  try {
    const { slug } = await params;
    const personajes = await getPersonajes(slug);
    return NextResponse.json(personajes);
  } catch (error: any) {
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ slug: string }> }
) {
  try {
    const { slug } = await params;
    const { action, personaje, feedback, personajes: inputPersonajes, nuevoPersonaje, ideaMotriz: inputIdeaMotriz } = await request.json();

    if (action === 'generate') {
      const ideaMotriz = await getIdeaMotriz(slug);
      if (!ideaMotriz) {
        return NextResponse.json({ error: 'Primero debes crear la Idea Motriz' }, { status: 400 });
      }
      const { generatePersonajes } = await import('@/lib/llm-service');
      const personajes = await generatePersonajes(ideaMotriz);
      await savePersonajes(slug, personajes);
      return NextResponse.json(personajes);
    } 
    
    if (action === 'refine' && personaje && feedback) {
      const { refinePersonaje } = await import('@/lib/llm-service');
      const refined = await refinePersonaje(personaje, feedback);
      const current = await getPersonajes(slug);
      const updated = current.map(p => p.id === refined.id ? refined : p);
      await savePersonajes(slug, updated);
      return NextResponse.json(refined);
    }
    
    if (action === 'save' && inputPersonajes) {
      await savePersonajes(slug, inputPersonajes);
      return NextResponse.json({ success: true });
    }

    if (action === 'improve' && feedback && inputPersonajes) {
      const { improvePersonajes } = await import('@/lib/llm-service');
      const improved = await improvePersonajes(inputPersonajes, feedback);
      await savePersonajes(slug, improved);
      return NextResponse.json(improved);
    }

    if (action === 'add' && nuevoPersonaje) {
      const ideaMotriz = inputIdeaMotriz || await getIdeaMotriz(slug);
      const { generateNewPersonaje } = await import('@/lib/llm-service');
      const newPersonaje = await generateNewPersonaje(nuevoPersonaje, ideaMotriz, inputPersonajes || []);
      const current = inputPersonajes || await getPersonajes(slug);
      const updated = [...current, newPersonaje];
      await savePersonajes(slug, updated);
      return NextResponse.json(newPersonaje);
    }

    return NextResponse.json({ error: 'Acción inválida' }, { status: 400 });
  } catch (error: any) {
    console.error('Error en personajes:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}
