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

// GET /api/planificacion - Listar planificaciones
export async function GET(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const { searchParams } = new URL(request.url);
    const ano = searchParams.get('ano');
    const mes = searchParams.get('mes');
    const categoria = searchParams.get('categoria');
    const tipo = searchParams.get('tipo');
    const estado = searchParams.get('estado');

    const where: Record<string, unknown> = {
      escuelaId: session.user.escuelaId || '',
    };

    if (ano) where.ano = parseInt(ano);
    if (mes) where.mes = parseInt(mes);
    if (categoria) where.categoria = categoria;
    if (tipo) where.tipo = tipo;
    if (estado) where.estado = estado;

    const planificaciones = await prisma.planificacionAnual.findMany({
      where,
      orderBy: [{ ano: 'desc' }, { mes: 'asc' }, { fechaInicio: 'asc' }],
    });

    // Agrupar por mes si se solicita año completo
    const planificacionesPorMes: Record<number, typeof planificaciones> = {};
    planificaciones.forEach((p) => {
      if (!planificacionesPorMes[p.mes]) {
        planificacionesPorMes[p.mes] = [];
      }
      planificacionesPorMes[p.mes].push(p);
    });

    return NextResponse.json({ planificaciones, planificacionesPorMes });
  } catch (error) {
    console.error('Error fetching planificaciones:', error);
    return NextResponse.json({ error: 'Error al obtener planificaciones' }, { status: 500 });
  }
}

// POST /api/planificacion - Crear planificación
export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (!['COORDINADOR', 'PROFESOR'].includes(session.user.rol || '')) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 403 });
    }

    const body = await request.json();
    const {
      ano,
      mes,
      semana,
      categoria,
      tipo,
      titulo,
      descripcion,
      fechaInicio,
      fechaFin,
      lugar,
      responsableId,
      campeonatoId,
      observaciones,
    } = body;

    if (!ano || !mes || !categoria || !tipo || !titulo || !fechaInicio) {
      return NextResponse.json({ error: 'Faltan campos requeridos' }, { status: 400 });
    }

    const planificacion = await prisma.planificacionAnual.create({
      data: {
        escuelaId: session.user.escuelaId || '',
        ano,
        mes,
        semana,
        categoria,
        tipo,
        titulo,
        descripcion,
        fechaInicio: new Date(fechaInicio),
        fechaFin: fechaFin ? new Date(fechaFin) : null,
        lugar,
        responsableId,
        campeonatoId,
        observaciones,
        creadorId: session.user.id,
      },
    });

    return NextResponse.json({ planificacion }, { status: 201 });
  } catch (error) {
    console.error('Error creating planificacion:', error);
    return NextResponse.json({ error: 'Error al crear planificación' }, { status: 500 });
  }
}
