/* eslint-disable @typescript-eslint/no-explicit-any */
// /api/berita/findManyPaginated.ts
import prisma from "@/lib/prisma";
import { Context } from "elysia";

async function pasarDesaFindMany(context: Context) {
  // Ambil parameter dari query
  const page = Number(context.query.page) || 1;
  const limit = Number(context.query.limit) || 10;
  const search = (context.query.search as string) || '';
  const categoryId = context.query.categoryId as string | undefined;
  const skip = (page - 1) * limit;

  // Buat where clause
  const where: any = { isActive: true };

  // Tambahkan filter kategori (jika ada)
  if (categoryId) {
    where.KategoriToPasar = {
      some: {
        kategoriId: categoryId
      }
    };
  }

  // Tambahkan pencarian (jika ada)
  if (search) {
    where.AND = where.AND || [];
    where.AND.push({
      OR: [
        { nama: { contains: search, mode: 'insensitive' } },
        { alamatUsaha: { contains: search, mode: 'insensitive' } },
        { 
          KategoriToPasar: { 
            some: { 
              kategori: { 
                nama: { contains: search, mode: 'insensitive' } 
              } 
            } 
          } 
        }
      ]
    });
  }

  try {
    // Ambil data dan total count secara paralel
    const [data, total] = await Promise.all([
      prisma.pasarDesa.findMany({
        where,
        include: {
          image: true,
          KategoriToPasar: {
            include: {
              kategori: true
            }
          }
        },
        skip,
        take: limit,
        orderBy: { createdAt: 'desc' },
      }),
      prisma.pasarDesa.count({ where }),
    ]);

    return {
      success: true,
      message: "Berhasil ambil pasar desa dengan pagination",
      data,
      page,
      limit,
      total,
      totalPages: Math.ceil(total / limit),
    };
  } catch (e) {
    console.error("Error di findMany paginated:", e);
    return {
      success: false,
      message: "Gagal mengambil data pasar desa",
    };
  }
}

export default pasarDesaFindMany;