import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import bcrypt from 'bcryptjs';

export async function POST(request: Request) {
  try {
    const { email, password } = await request.json();

    if (!email || !password) {
      return NextResponse.json({ error: 'Email/Usuario y contraseña requeridos' }, { status: 400 });
    }

    const cleanInput = email.trim().toLowerCase();
    const user = await prisma.user.findFirst({
      where: {
        OR: [
          { email: cleanInput },
          { username: cleanInput }
        ]
      }
    });

    if (!user) {
      return NextResponse.json({ error: 'Credenciales inválidas. Verifica tu correo y contraseña.' }, { status: 401 });
    }

    let passwordMatch = user.password === password.trim();
    if (!passwordMatch) {
      try {
        passwordMatch = await bcrypt.compare(password.trim(), user.password);
      } catch {}
    }

    if (!passwordMatch) {
      return NextResponse.json({ error: 'Credenciales inválidas. Verifica tu correo y contraseña.' }, { status: 401 });
    }

    if (user.role !== 'FARM' && user.role !== 'ADMIN') {
      return NextResponse.json({ error: 'Este usuario no tiene acceso al portal de fincas.' }, { status: 403 });
    }

    // Load farm details
    let farm = null;
    if (user.farmId) {
      farm = await prisma.farm.findUnique({ where: { id: user.farmId } });
    }

    return NextResponse.json({
      success: true,
      user: {
        id: user.id,
        email: user.email || user.username || '',
        name: user.name || user.farmName || user.username || 'Usuario Finca',
        role: user.role,
        farmId: user.farmId || farm?.id || null,
        farmName: user.farmName || farm?.name || null,
      },
      farm
    });

  } catch (error: any) {
    console.error('Error in farm portal login:', error);
    return NextResponse.json({ error: 'Error interno en el servidor' }, { status: 500 });
  }
}
