import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { prisma } from '@/lib/db';

// GET - Obtener contenido web (público o filtrado)
export async function GET(request: NextRequest) {
  try {
    const { searchParams } = new URL(request.url);
    const tipo = searchParams.get('tipo');
    const clave = searchParams.get('clave');
    const activo = searchParams.get('activo');
    const escuelaId = searchParams.get('escuelaId');
    
    // Construir filtros
    const where: Record<string, unknown> = {};
    
    if (tipo) where.tipo = tipo;
    if (clave) where.clave = clave;
    if (activo !== null) where.activo = activo === 'true';
    if (escuelaId) where.escuelaId = escuelaId;
    
    const contenidos = await prisma.contenidoWeb.findMany({
      where,
      orderBy: [
        { tipo: 'asc' },
        { orden: 'asc' }
      ]
    });
    
    return NextResponse.json({
      success: true,
      contenidos
    });
    
  } catch (error) {
    console.error('Error obteniendo contenido:', error);
    return NextResponse.json(
      { success: false, error: 'Error obteniendo contenido' },
      { status: 500 }
    );
  }
}

// POST - Crear nuevo contenido
export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session?.user) {
      return NextResponse.json(
        { success: false, error: 'No autorizado' },
        { status: 401 }
      );
    }
    
    if (session.user.rol !== 'COORDINADOR') {
      return NextResponse.json(
        { success: false, error: 'Solo coordinadores pueden gestionar contenido' },
        { status: 403 }
      );
    }
    
    const body = await request.json();
    const { tipo, clave, titulo, contenido, icono, enlace, orden, activo } = body;
    
    if (!tipo || !clave) {
      return NextResponse.json(
        { success: false, error: 'Tipo y clave son requeridos' },
        { status: 400 }
      );
    }
    
    const nuevoContenido = await prisma.contenidoWeb.create({
      data: {
        escuelaId: session.user.escuelaId!,
        tipo,
        clave,
        titulo,
        contenido,
        icono,
        enlace,
        orden: orden || 0,
        activo: activo !== false,
        creadorId: session.user.id
      }
    });
    
    return NextResponse.json({
      success: true,
      contenido: nuevoContenido
    }, { status: 201 });
    
  } catch (error) {
    console.error('Error creando contenido:', error);
    return NextResponse.json(
      { success: false, error: 'Error creando contenido' },
      { status: 500 }
    );
  }
}

// PUT - Actualizar contenido existente
export async function PUT(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session?.user) {
      return NextResponse.json(
        { success: false, error: 'No autorizado' },
        { status: 401 }
      );
    }
    
    if (session.user.rol !== 'COORDINADOR') {
      return NextResponse.json(
        { success: false, error: 'Solo coordinadores pueden gestionar contenido' },
        { status: 403 }
      );
    }
    
    const body = await request.json();
    const { id, titulo, contenido, icono, enlace, orden, activo } = body;
    
    if (!id) {
      return NextResponse.json(
        { success: false, error: 'ID es requerido' },
        { status: 400 }
      );
    }
    
    const contenidoActualizado = await prisma.contenidoWeb.update({
      where: { id },
      data: {
        titulo,
        contenido,
        icono,
        enlace,
        orden,
        activo
      }
    });
    
    return NextResponse.json({
      success: true,
      contenido: contenidoActualizado
    });
    
  } catch (error) {
    console.error('Error actualizando contenido:', error);
    return NextResponse.json(
      { success: false, error: 'Error actualizando contenido' },
      { status: 500 }
    );
  }
}
