import { Setting } from '../models/Setting';
import { Language } from '../models/Language';
import path from 'path';
import fs from 'fs';

export async function generateSettings() {
  try {
    const settings = await Setting.query().first();

    if (!settings || !settings.sites_settings) {
      console.error('Settings not found');
      return;
    }

    let parsedSettings;
    try {
      parsedSettings = settings.sites_settings;
    } catch (error) {
      console.error('Error parsing sites_settings:', error);
      return;
    }

    const selectedLangCodes = parsedSettings.selected_languages || [];

    const languages = await Language.query()
      .whereIn('lang_code', selectedLangCodes)
      .select('lang_code', 'name');

    const languageLabels: { [key: string]: string } = {};
    for (const lang of languages) {
      if (lang.lang_code) {
        languageLabels[lang.lang_code] = lang.name;
      }
    }

    // Create a shallow copy and remove sensitive fields
    const safeSettings = { ...parsedSettings };
    delete safeSettings.api_keys; // Remove sensitive key(s)

    const settingsData = {
      success: true,
      message: 'Settings fetched successfully',
      settings: { sites_settings: JSON.stringify(safeSettings) },
      language_labels: languageLabels,
    };

    const isProduction = process.env.NODE_ENV === 'production';

    const baseDir = path.join(__dirname, '..', '..', '..');

    const settingsDir = isProduction
      ? path.join(baseDir, 'nytsolvers', 'dist', 'client', 'settings')
      : path.join(baseDir, 'project', 'public', 'settings');

    if (!fs.existsSync(settingsDir)) {
      fs.mkdirSync(settingsDir, { recursive: true });
    }

    fs.writeFileSync(path.join(settingsDir, 'setting.json'), JSON.stringify(settingsData, null, 2));

    console.log('Settings generated successfully');
  } catch (error) {
    console.error('Error generating settings:', error);
  }
}
