import { PrismaClient } from '@prisma/client'

// Singleton pattern для Prisma Client
// НАСТОЯЩАЯ lazy initialization - клиент создается только при первом обращении
const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined
}

let prismaInstance: PrismaClient | undefined

export function getPrisma(): PrismaClient {
  // Проверяем, находимся ли мы в процессе сборки
  const isBuildTime = process.env.NEXT_PHASE === 'phase-production-build'
  
  if (isBuildTime) {
    // Во время сборки возвращаем mock объект, который не делает реальных запросов
    console.log('⚠️ Build time detected, returning mock Prisma client')
    return {
      $connect: async () => {},
      $disconnect: async () => {},
      contactSubmission: {
        create: async () => ({ id: 1, name: 'mock', phone: 'mock', email: null, serviceType: null, message: null, createdAt: new Date() }),
        findMany: async () => [],
      }
    } as any
  }

  // Runtime: используем настоящий клиент
  if (!prismaInstance) {
    if (globalForPrisma.prisma) {
      prismaInstance = globalForPrisma.prisma
    } else {
      prismaInstance = new PrismaClient({
        log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'],
      })
      
      if (process.env.NODE_ENV !== 'production') {
        globalForPrisma.prisma = prismaInstance
      }
    }
  }

  return prismaInstance
}

// Для обратной совместимости экспортируем через Proxy
export const prisma = new Proxy({} as PrismaClient, {
  get(target, prop) {
    return (getPrisma() as any)[prop]
  }
})
