import mongoose from 'mongoose';
import config from '@/shared/config/config.js';
import { buildGlobalRefMap } from '../utils/guard/ref-guard';

interface MongooseConfig {
  protocol: string;
  username: string;
  password: string;
  host: string;
  name: string;
}

const connectToDatabase = async (): Promise<void> => {
  const mongooseConfig: MongooseConfig = config.mongoose;

  const { protocol, username, password, host, name } = mongooseConfig;

  const isAtlas = protocol === 'mongodb+srv';
  const mongoURI = `${protocol}://${username}:${encodeURIComponent(password)}@${host}/${name}?${isAtlas ? 'retryWrites=true&w=majority' : 'authSource=admin'}`;

  try {
    console.log(`🔌 Attempting primary MongoDB connection`);
    await mongoose.connect(mongoURI, {
      autoIndex: true,
    });
    buildGlobalRefMap();
    console.log('✅ Successfully connected to MongoDB');
  } catch (error: unknown) {
    if (error instanceof Error)
      console.error('❌ Primary MongoDB connection failed:', error.message);
    else console.error('❌ Unknown error during primary MongoDB connection.');
    process.exit(1);
  }
};

export default connectToDatabase;
