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

// GET: Obtener objetivo por ID
export async function GET(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const objetivo = await prisma.objetivosIndividuales.findUnique({
      where: { id: params.id },
      include: {
        alumno: {
          include: {
            usuario: {
              select: {
                nombres: true,
                apellidos: true,
                nombreCorto: true
              }
            }
          }
        },
        profesor: {
          select: {
            nombres: true,
            apellidos: true,
            nombreCorto: true
          }
        }
      }
    });

    if (!objetivo) {
      return NextResponse.json({ error: 'Objetivo no encontrado' }, { status: 404 });
    }

    return NextResponse.json({ objetivo });
  } catch (error: any) {
    console.error('Error al obtener objetivo:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

// PUT: Actualizar objetivo (incluye actualizar progreso)
export async function PUT(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (session.user.rol !== 'COORDINADOR' && session.user.rol !== 'PROFESOR') {
      return NextResponse.json({ error: 'Permisos insuficientes' }, { status: 403 });
    }

    const data = await request.json();
    const { progreso, completado, objetivoFinal, objetivoInicial, objetivosIntermedios } = data;

    const updateData: any = {};
    
    if (progreso !== undefined) {
      updateData.progreso = Math.min(100, Math.max(0, progreso));
    }
    if (completado !== undefined) {
      updateData.completado = completado;
    }
    if (objetivoFinal) {
      updateData.objetivoFinal = objetivoFinal;
    }
    if (objetivoInicial) {
      updateData.objetivoInicial = objetivoInicial;
    }
    if (objetivosIntermedios) {
      updateData.objetivosIntermedios = objetivosIntermedios;
    }

    const objetivo = await prisma.objetivosIndividuales.update({
      where: { id: params.id },
      data: updateData,
      include: {
        alumno: {
          include: {
            usuario: {
              select: {
                nombres: true,
                apellidos: true
              }
            }
          }
        },
        profesor: {
          select: {
            nombres: true,
            apellidos: true
          }
        }
      }
    });

    return NextResponse.json({ 
      objetivo, 
      message: 'Objetivo actualizado exitosamente' 
    });

  } catch (error: any) {
    console.error('Error al actualizar objetivo:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

// DELETE: Eliminar objetivo
export async function DELETE(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (session.user.rol !== 'COORDINADOR' && session.user.rol !== 'PROFESOR') {
      return NextResponse.json({ error: 'Permisos insuficientes' }, { status: 403 });
    }

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

    return NextResponse.json({ message: 'Objetivo eliminado exitosamente' });

  } catch (error: any) {
    console.error('Error al eliminar objetivo:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}
