/**
 * Script d'Analyse N-Gram pour Textes d'Annonces Google Ads
 * Version: 2025.1
 * Adapté pour les comptes MCC avec contrôles de performance
 */

// Configuration globale
var CONFIG = {
  // Paramètres essentiels
  SPREADSHEET_URL: "", // URL de votre Google Sheets
  ACCOUNT_IDS: [], // Laissez vide pour le compte actuel, ou ajoutez des IDs pour MCC
  
  // Paramètres d'analyse
  DATE_RANGE: {
    START_DATE: "2025-01-01",
    END_DATE: "2025-05-21"
  },
  
  // Configuration N-Gram
  NGRAM_CONFIG: {
    MIN_LENGTH: 2,
    MAX_LENGTH: 6,
    MIN_IMPRESSIONS: 100,
    MIN_CLICKS: 10
  },
  
  // Contrôles de performance
  QUOTA_THRESHOLD: 25000,
  EXECUTION_TIMEOUT: 25 * 60 * 1000, // 25 minutes
  
  // Paramètres de rapport
  EMAIL_RECIPIENT: "votre@email.com",
  CURRENCY: "€"
};

// Variables globales
var startTime = new Date().getTime();
var processedAccounts = 0;

function main() {
  try {
    validateConfig();
    
    if (CONFIG.ACCOUNT_IDS.length > 0) {
      processMCCAccounts();
    } else {
      processIndividualAccount();
    }
    
    sendCompletionEmail();
  } catch (e) {
    handleError(e);
  }
}

function validateConfig() {
  if (!CONFIG.SPREADSHEET_URL) {
    throw new Error("URL du spreadsheet manquante");
  }
  checkQuota();
}

function checkTimeout() {
  if (new Date().getTime() - startTime > CONFIG.EXECUTION_TIMEOUT) {
    throw new Error("Timeout - Durée d'exécution dépassée");
  }
}

function checkQuota() {
  var quotaUsage = typeof AdsManagerApp !== 'undefined' ? 
    AdsManagerApp.getApiUsage() : AdWordsApp.getApiUsage();
    
  if (quotaUsage.cost > CONFIG.QUOTA_THRESHOLD) {
    throw new Error("Quota API presque épuisé");
  }
}

function processIndividualAccount() {
  var accountData = analyzeAccount();
  writeResults(accountData);
}

function processMCCAccounts() {
  CONFIG.ACCOUNT_IDS.forEach(function(accountId) {
    checkTimeout();
    checkQuota();
    
    var account = AdsManagerApp.accounts()
      .withIds([accountId])
      .get()
      .next();
      
    AdsManagerApp.select(account);
    processIndividualAccount();
    processedAccounts++;
  });
}

function analyzeAccount() {
  // Votre code d'analyse N-Gram existant ici
  // Avec les vérifications de timeout et quota
}

function writeResults(data) {
  var spreadsheet = SpreadsheetApp.openByUrl(CONFIG.SPREADSHEET_URL);
  // Code de formatage et d'écriture des résultats
}

function sendCompletionEmail() {
  var message = "Analyse N-Gram terminée\n" +
                "Comptes traités : " + processedAccounts + "\n" +
                "Durée totale : " + ((new Date().getTime() - startTime)/1000) + " secondes";
                
  MailApp.sendEmail({
    to: CONFIG.EMAIL_RECIPIENT,
    subject: "Analyse N-Gram terminée",
    body: message
  });
}

function handleError(error) {
  Logger.log("Erreur : " + error.toString());
  MailApp.sendEmail({
    to: CONFIG.EMAIL_RECIPIENT,
    subject: "Erreur - Analyse N-Gram",
    body: error.toString()
  });
}