import prisma from '../lib/prisma.js';

export async function getTariffsByProvider(providerId: number, includeInactive = false) {
  const where: { providerId: number; isActive?: boolean } = { providerId };
  if (!includeInactive) {
    where.isActive = true;
  }
  return prisma.tariff.findMany({
    where,
    orderBy: { name: 'asc' },
    include: {
      _count: {
        select: { contracts: true },
      },
    },
  });
}

export async function getTariffById(id: number) {
  return prisma.tariff.findUnique({
    where: { id },
    include: {
      provider: true,
      _count: {
        select: { contracts: true },
      },
    },
  });
}

export async function createTariff(data: {
  providerId: number;
  name: string;
}) {
  return prisma.tariff.create({
    data: {
      ...data,
      isActive: true,
    },
  });
}

export async function updateTariff(
  id: number,
  data: {
    name?: string;
    isActive?: boolean;
  }
) {
  return prisma.tariff.update({
    where: { id },
    data,
  });
}

export async function deleteTariff(id: number) {
  // Check if tariff is used by any contracts
  const count = await prisma.contract.count({
    where: { tariffId: id },
  });

  if (count > 0) {
    throw new Error(
      `Tarif kann nicht gelöscht werden, da er von ${count} Verträgen verwendet wird`
    );
  }

  return prisma.tariff.delete({ where: { id } });
}
