import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  const expenses = await prisma.expense.findMany({
    where: {
      archived: false,
      OR: [
        { fundingSourceType: "UNKNOWN" },
        { contributionCreditPartnerId: null },
        { contributionCreditAmount: null }
      ]
    },
    select: {
      id: true,
      paidById: true,
      finalCost: true,
      fundingSourceType: true,
      createsContributionCredit: true,
      contributionCreditPartnerId: true,
      contributionCreditAmount: true
    }
  });

  let updated = 0;
  for (const expense of expenses) {
    if (!expense.paidById || expense.createsContributionCredit === false) continue;
    await prisma.expense.update({
      where: { id: expense.id },
      data: {
        fundingSourceType: expense.fundingSourceType ?? "UNKNOWN",
        createsContributionCredit: true,
        contributionCreditPartnerId: expense.contributionCreditPartnerId ?? expense.paidById,
        contributionCreditAmount: expense.contributionCreditAmount ?? expense.finalCost
      }
    });
    updated += 1;
  }

  console.log(`Backfilled ${updated} expense funding records.`);
}

main()
  .catch((error) => {
    console.error(error);
    process.exitCode = 1;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
