import { Prisma } from '@prisma/client'
import type { ModelName } from './types/models'

let prismaModelNamesCache: Prisma.ModelName[] | undefined
let modelNamesCache: ModelName[] | undefined

export const models = {
  get prismaNames() {
    if (prismaModelNamesCache) return prismaModelNamesCache

    prismaModelNamesCache = Prisma.dmmf.datamodel.models.map(
      (model) => model.dbName || model.name,
    ) as Prisma.ModelName[]

    return prismaModelNamesCache
  },

  get names() {
    if (modelNamesCache) return modelNamesCache

    modelNamesCache = this.prismaNames.map((name) => name.toLowerCase() as ModelName)

    return modelNamesCache
  },
}
