import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "../../../auth/[...nextauth]/route";
import { prisma } from "@/lib/prisma";

// GET /api/categories/config/payment-methods
export async function GET() {
  try {
    const session = await getServerSession(authOptions);
    if (!session || !session.user) {
      return NextResponse.json({ error: "No autenticado" }, { status: 401 });
    }

    const methods = await prisma.paymentMethod.findMany({
      orderBy: { name: 'asc' }
    });

    return NextResponse.json(methods);
  } catch (error) {
    return NextResponse.json(
      { error: "Error al obtener formas de pago" },
      { status: 500 }
    );
  }
}

// POST /api/categories/config/payment-methods
export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    if (!session || !session.user || session.user.role !== "ADMIN") {
      return NextResponse.json({ error: "No autorizado" }, { status: 403 });
    }

    const { name } = await request.json();

    if (!name || name.trim() === "") {
      return NextResponse.json({ error: "El nombre es obligatorio" }, { status: 400 });
    }

    const existing = await prisma.paymentMethod.findUnique({
      where: { name: name.trim() }
    });

    if (existing) {
      return NextResponse.json({ error: "Ya existe esta forma de pago" }, { status: 400 });
    }

    const newMethod = await prisma.paymentMethod.create({
      data: { name: name.trim() }
    });

    return NextResponse.json(newMethod, { status: 201 });
  } catch (error) {
    return NextResponse.json(
      { error: "Error al crear forma de pago" },
      { status: 500 }
    );
  }
}
