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

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const farmId = searchParams.get('farmId');

    const where: any = { role: 'FARM' };
    if (farmId) where.farmId = farmId;

    const users = await prisma.user.findMany({
      where,
      select: {
        id: true,
        username: true,
        email: true,
        name: true,
        password: true,
        role: true,
        farmId: true,
        farmName: true,
        createdAt: true,
      },
      orderBy: { createdAt: 'desc' }
    });

    return NextResponse.json(users);
  } catch (error: any) {
    console.error('Error fetching farm users:', error);
    return NextResponse.json({ error: 'Error al obtener usuarios de finca' }, { status: 500 });
  }
}

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

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

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

    if (existing) {
      return NextResponse.json({ error: 'Ya existe un usuario con este correo electrónico' }, { status: 400 });
    }

    // Resolve farm name if not provided
    let resolvedFarmName = farmName;
    if (!resolvedFarmName) {
      const f = await prisma.farm.findUnique({ where: { id: farmId } });
      resolvedFarmName = f?.name || 'Finca';
    }

    const hashedPassword = await bcrypt.hash(password.trim(), 10);

    const newUser = await prisma.user.create({
      data: {
        username: cleanEmail,
        email: cleanEmail,
        password: hashedPassword,
        name: name?.trim() || resolvedFarmName,
        role: 'FARM',
        farmId,
        farmName: resolvedFarmName
      },
      select: {
        id: true,
        username: true,
        email: true,
        name: true,
        password: true,
        role: true,
        farmId: true,
        farmName: true,
        createdAt: true,
      }
    });

    return NextResponse.json(newUser, { status: 201 });
  } catch (error: any) {
    console.error('Error creating farm user:', error);
    return NextResponse.json({ error: error.message || 'Error al crear usuario de finca' }, { status: 500 });
  }
}

export async function DELETE(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const id = searchParams.get('id');
    if (!id) return NextResponse.json({ error: 'ID requerido' }, { status: 400 });

    await prisma.user.delete({ where: { id } });
    return NextResponse.json({ success: true });
  } catch (error: any) {
    return NextResponse.json({ error: 'Error al eliminar usuario' }, { status: 500 });
  }
}
