import fs from 'fs';

const DB_PATH = './db.json';

// Valeurs par défaut
const settingsDefaultValues = {
  quoiAnswerPercentage: 100,
  quoicoubehAnswerPercentage: 100,
  feurAnswerPercentage: 100,
  mentionAnswerPercentage: 100,
  forcedAnswerRoleId: null,
  ignoredRoleId: null,
};

// Structure de base de la DB en mémoire
let dbData = {
  ignoredChannels: [], // Liste d'objets { channelId, guildId }
  configs: {}          // Objet : guildId -> { settings }
};

// --- Fonctions internes (Sauvegarde/Chargement) ---

function loadDb() {
  if (!fs.existsSync(DB_PATH)) {
    saveDb(); // Crée le fichier s'il n'existe pas
    return;
  }
  try {
    const raw = fs.readFileSync(DB_PATH, 'utf-8');
    dbData = JSON.parse(raw);
    
    // Sécurité : s'assurer que les structures existent
    if (!dbData.ignoredChannels) dbData.ignoredChannels = [];
    if (!dbData.configs) dbData.configs = {};
  } catch (e) {
    console.error("Erreur lecture DB, réinitialisation :", e);
    saveDb();
  }
}

function saveDb() {
  fs.writeFileSync(DB_PATH, JSON.stringify(dbData, null, 2), 'utf-8');
}

// Initialisation au démarrage
loadDb();

// --- Fonctions exportées (Même signature que l'ancien db.js) ---

export function addChannelToIgnoreList(channelId, guildId) {
  // Vérifier si déjà présent
  const exists = dbData.ignoredChannels.some(c => c.channelId === channelId);
  if (!exists) {
    dbData.ignoredChannels.push({ channelId, guildId });
    saveDb();
  }
}

export function getIgnoredChannels(guildId) {
  return dbData.ignoredChannels.filter(c => c.guildId === guildId);
}

export function removeChannelFromIgnoreList(channelId) {
  const initialLength = dbData.ignoredChannels.length;
  dbData.ignoredChannels = dbData.ignoredChannels.filter(c => c.channelId !== channelId);
  
  if (dbData.ignoredChannels.length !== initialLength) {
    saveDb();
  }
}

export function setSetting(guildId, setting, value) {
  // Initialiser la config de la guilde si inexistante
  if (!dbData.configs[guildId]) {
    dbData.configs[guildId] = { ...settingsDefaultValues };
  }

  // Mettre à jour la valeur
  dbData.configs[guildId][setting] = value;
  saveDb();
}

export function getSetting(guildId, setting) {
  const config = dbData.configs[guildId];
  
  if (!config) {
    return settingsDefaultValues[setting];
  }

  const val = config[setting];
  return val === undefined ? settingsDefaultValues[setting] : val;
}