
import { NextAuthOptions } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';

const prisma = new PrismaClient();

export const authOptions: NextAuthOptions = {
  providers: [
    CredentialsProvider({
      name: 'credentials',
      credentials: {
        escuela: { label: 'Escuela', type: 'text' },
        rut: { label: 'RUT', type: 'text' },
        clave: { label: 'Clave', type: 'password' }
      },
      async authorize(credentials) {
        if (!credentials?.rut || !credentials?.clave) {
          return null;
        }

        try {
          // Buscar usuario por RUT en el sistema principal
          const usuario = await prisma.usuario.findUnique({
            where: { rut: credentials.rut },
            include: {
              escuela: true,
              alumno: true,
              profesor: true,
              noProfesor: true
            }
          });

          if (!usuario || !usuario.activo) {
            return null;
          }

          // Verificar contraseña
          const isValidPassword = await bcrypt.compare(credentials.clave, usuario.clave);
          if (!isValidPassword) {
            return null;
          }

          // Buscar o crear usuario en tabla User para NextAuth
          let user = await prisma.user.findUnique({
            where: { email: usuario.email }
          });

          if (!user) {
            user = await prisma.user.create({
              data: {
                email: usuario.email,
                name: usuario.nombreCorto,
                rut: usuario.rut,
                rol: usuario.rol,
                escuelaId: usuario.escuelaId,
                activo: usuario.activo
              }
            });
          }

          return {
            id: user.id,
            email: user.email,
            name: user.name,
            rut: user.rut || undefined,
            rol: user.rol || undefined,
            escuelaId: user.escuelaId || undefined,
            usuarioId: usuario.id,
            escuela: usuario.escuela.nombre
          };
        } catch (error) {
          console.error('Error de autenticación:', error);
          return null;
        }
      }
    })
  ],
  session: {
    strategy: 'jwt'
  },
  callbacks: {
    async jwt({ token, user }) {
      if (user) {
        token.rut = user.rut || undefined;
        token.rol = user.rol || undefined;
        token.escuelaId = user.escuelaId || undefined;
        token.usuarioId = user.usuarioId || undefined;
        token.escuela = user.escuela || undefined;
      }
      return token;
    },
    async session({ session, token }) {
      if (token && session.user) {
        session.user.id = token.sub || '';
        session.user.rut = token.rut || undefined;
        session.user.rol = token.rol || undefined;
        session.user.escuelaId = token.escuelaId || undefined;
        session.user.usuarioId = token.usuarioId || undefined;
        session.user.escuela = token.escuela || undefined;
      }
      return session;
    }
  },
  pages: {
    signIn: '/auth/signin',
  },
  secret: process.env.NEXTAUTH_SECRET
};
