/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs');
const path = require('path');
const { getDMMF, getSchemaPath } = require('@prisma/internals');

async function generateTypes() {
  const schemaPath = await getSchemaPath();
  const dmmf = await getDMMF({
    datamodel: fs.readFileSync(schemaPath, 'utf-8'),
  });

  let content =
    '// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n';
  content += "import { Prisma } from '@prisma/client';\n\n";
  content += 'export type ModelSelectMap = {\n';

  for (const model of dmmf.datamodel.models) {
    content += `  ${model.name}: Prisma.${model.name}Select;\n`;
  }

  content += '};\n';

  fs.writeFileSync(
    path.join(__dirname, '../src/utils/prisma-select/model-select-map.ts'),
    content,
  );
}

generateTypes().catch((e) => {
  console.error(e);
  process.exit(1);
});
