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

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

    const profesores = await prisma.profesor.findMany({
      where: {
        usuario: {
          escuelaId: session.user.escuelaId,
          activo: true
        }
      },
      include: {
        usuario: {
          select: {
            id: true,
            nombres: true,
            apellidos: true,
            nombreCorto: true,
            rut: true,
            email: true,
            telefono: true,
            foto: true
          }
        }
      },
      orderBy: {
        usuario: {
          nombreCorto: 'asc'
        }
      }
    });

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

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

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

    const data = await request.json();
    const { usuario: usuarioData, profesor: profesorData } = data;

    const nuevoProfesor = await prisma.$transaction(async (tx: any) => {
      const usuario = await tx.usuario.create({
        data: {
          escuelaId: session.user.escuelaId!,
          rut: usuarioData.rut,
          nombres: usuarioData.nombres,
          apellidos: usuarioData.apellidos,
          nombreCorto: `${usuarioData.nombres.split(' ')[0]} ${usuarioData.apellidos.split(' ')[0]}`,
          fechaNacimiento: new Date(usuarioData.fechaNacimiento),
          telefono: usuarioData.telefono || [],
          email: usuarioData.email,
          direccionCalle: usuarioData.direccionCalle,
          direccionNumero: usuarioData.direccionNumero,
          direccionComuna: usuarioData.direccionComuna,
          direccionRegion: usuarioData.direccionRegion,
          rol: 'PROFESOR',
          clave: usuarioData.clave
        }
      });

      const profesor = await tx.profesor.create({
        data: {
          usuarioId: usuario.id,
          categoriasACargo: profesorData.categoriasACargo || [],
          titulos: profesorData.titulos || []
        },
        include: {
          usuario: true
        }
      });

      return profesor;
    });

    return NextResponse.json({ 
      profesor: nuevoProfesor, 
      message: 'Profesor creado exitosamente' 
    }, { status: 201 });

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