import { connectToDatabase } from './db';
import SystemSettings, { ISystemSettings } from './models/SystemSettings';
import mongoose from 'mongoose';

let cachedSettings: ISystemSettings | null = null;

export async function getSystemSettings(bypassCache = false): Promise<ISystemSettings> {
  await connectToDatabase();

  if (cachedSettings && !bypassCache) {
    return cachedSettings;
  }

  let settings = await SystemSettings.findOne();

  // If no settings document exists (e.g. initial run before seed), return a mock document object
  if (!settings) {
    settings = new SystemSettings({
      attendanceInactiveThresholdDays: 45,
      satsangOccurrenceGenerationDays: 90,
      attendanceEarlyCheckInMinutes: 60,
      attendanceBackEntryDays: 7,
      nearestSatsangRadiusKm: 50,
      timezone: 'Asia/Kolkata',
      // Seed script will set this properly. Here we use a temp fallback ObjectId
      updatedBy: new mongoose.Types.ObjectId('000000000000000000000000')
    });
  }

  cachedSettings = settings;
  return settings;
}

export function clearSettingsCache() {
  cachedSettings = null;
}
