import { prisma } from '@/lib/db/prisma';
import { Prisma } from '@prisma/client';

export const categoryRepository = {
  // Used by employees: only active categories, in admin-defined order.
  listActive() {
    return prisma.category.findMany({
      where: { isActive: true },
      orderBy: [{ sortOrder: 'asc' }, { name: 'asc' }],
    });
  },

  // Used by admin: every category, including deactivated ones.
  listAll() {
    return prisma.category.findMany({
      orderBy: [{ sortOrder: 'asc' }, { name: 'asc' }],
      include: {
        _count: { select: { questions: true } },
      },
    });
  },

  findById(id: number) {
    return prisma.category.findUnique({ where: { id } });
  },

  findBySlug(slug: string) {
    return prisma.category.findUnique({ where: { slug } });
  },

  create(data: { name: string; slug: string; sortOrder: number }) {
    return prisma.category.create({ data });
  },

  update(id: number, data: Prisma.CategoryUpdateInput) {
    return prisma.category.update({ where: { id }, data });
  },

  // Returns the largest sort_order so we can append new categories
  // at the end without manual ordering.
  maxSortOrder() {
    return prisma.category.aggregate({ _max: { sortOrder: true } });
  },
};
