import { logger } from '@goodgo/logger';
import { PrismaClient } from '@prisma/client';

/**
 * EN: Prisma client instance configured for the application
 * VI: Instance Prisma client được cấu hình cho ứng dụng
 */
export const prisma = new PrismaClient({
  // EN: Enable detailed logging in development, minimal in production
  // VI: Bật ghi log chi tiết trong development, tối thiểu trong production
  log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'],
});

/**
 * EN: Establish database connection on application startup
 * VI: Thiết lập kết nối database khi khởi động ứng dụng
 */
export const connectDatabase = async (): Promise<void> => {
  try {
    // EN: Connect to database using Prisma
    // VI: Kết nối tới database sử dụng Prisma
    await prisma.$connect();
    logger.info('Database connected successfully / Kết nối database thành công');
  } catch (error) {
    // EN: Log error and exit if database connection fails
    // VI: Ghi log lỗi và thoát nếu kết nối database thất bại
    logger.error('Database connection failed / Kết nối database thất bại', { error });
    process.exit(1);
  }
};

/**
 * EN: Close database connection on application shutdown
 * VI: Đóng kết nối database khi tắt ứng dụng
 */
export const disconnectDatabase = async (): Promise<void> => {
  await prisma.$disconnect();
  logger.info('Database disconnected / Đã ngắt kết nối database');
};

/**
 * EN: Get Prisma client instance
 * VI: Lấy instance Prisma client
 */
export const getPrismaClient = (): PrismaClient => {
  return prisma;
};
