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

// GET /api/planificacion/[id] - Obtener detalle
export async function GET(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const { id } = await params;

    const planificacion = await prisma.planificacionAnual.findUnique({
      where: { id },
    });

    if (!planificacion) {
      return NextResponse.json({ error: 'Planificación no encontrada' }, { status: 404 });
    }

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

// PUT /api/planificacion/[id] - Actualizar planificación
export async function PUT(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  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 { id } = await params;
    const body = await request.json();

    const planificacion = await prisma.planificacionAnual.update({
      where: { id },
      data: {
        ...(body.mes !== undefined && { mes: body.mes }),
        ...(body.semana !== undefined && { semana: body.semana }),
        ...(body.categoria && { categoria: body.categoria }),
        ...(body.tipo && { tipo: body.tipo }),
        ...(body.titulo && { titulo: body.titulo }),
        ...(body.descripcion !== undefined && { descripcion: body.descripcion }),
        ...(body.fechaInicio && { fechaInicio: new Date(body.fechaInicio) }),
        ...(body.fechaFin !== undefined && { fechaFin: body.fechaFin ? new Date(body.fechaFin) : null }),
        ...(body.lugar !== undefined && { lugar: body.lugar }),
        ...(body.responsableId !== undefined && { responsableId: body.responsableId }),
        ...(body.estado && { estado: body.estado }),
        ...(body.campeonatoId !== undefined && { campeonatoId: body.campeonatoId }),
        ...(body.observaciones !== undefined && { observaciones: body.observaciones }),
      },
    });

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

// DELETE /api/planificacion/[id] - Eliminar planificación
export async function DELETE(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  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 { id } = await params;

    await prisma.planificacionAnual.delete({ where: { id } });

    return NextResponse.json({ message: 'Planificación eliminada' });
  } catch (error) {
    console.error('Error deleting planificacion:', error);
    return NextResponse.json({ error: 'Error al eliminar planificación' }, { status: 500 });
  }
}
