import path from 'path';
import fs from 'fs';
import { userDataDir } from '../utils/constants';


class SettingsStore {
  private settingsPath: string;
  private settings: { [key: string]: any };

  constructor() {
    this.settingsPath = path.join(userDataDir, 'settings.json');
    this.settings = {};
    this.loadSettings();
  }

  private loadSettings() {
    try {
      if (fs.existsSync(this.settingsPath)) {
        const data = fs.readFileSync(this.settingsPath, 'utf-8');
        this.settings = JSON.parse(data);

      } else {
        this.settings = {};
        this.saveSettings();

      }
    } catch (error) {
      console.error('Error loading settings:', error);
      this.settings = {};
    }
  }

  private saveSettings() {
    try {
      fs.writeFileSync(this.settingsPath, JSON.stringify(this.settings, null, 2));

    } catch (error) {
      console.error('Error saving settings:', error);
      throw error;
    }
  }

  get(key: string, defaultValue: any = null): any {
    const value = this.settings[key];

    return value || defaultValue;
  }

  set(key: string, value: any): void {

    this.settings[key] = value;
    this.saveSettings();
  }

  // Helper method to check if settings exist
  has(key: string): boolean {
    return key in this.settings;
  }

  // Helper method to delete a setting
  delete(key: string): void {
    delete this.settings[key];
    this.saveSettings();
  }
}

// Export a singleton instance
export const settingsStore = new SettingsStore(); 