#!/usr/bin/env node

/**
 * Script pour diagnostiquer et résoudre les problèmes de déploiement Replit
 * Usage: node scripts/replit-deployment-fix.js
 */

console.log('🚀 MediFlash SOS+ - Diagnostic de déploiement Replit');
console.log('=================================================\n');

// 1. Vérifier l'environnement de déploiement
console.log('1. État du déploiement:');
const deploymentVars = {
  NODE_ENV: process.env.NODE_ENV,
  REPL_ID: process.env.REPL_ID,
  REPL_DEPLOYMENT: process.env.REPL_DEPLOYMENT,
  REPLIT_DOMAINS: process.env.REPLIT_DOMAINS ? 'Définie' : 'Manquante'
};

Object.entries(deploymentVars).forEach(([key, value]) => {
  console.log(`   ${value ? '✅' : '❌'} ${key}: ${value || 'MANQUANTE'}`);
});

// 2. Test des secrets critiques
console.log('\n2. Secrets critiques:');
const criticalSecrets = {
  DATABASE_URL: process.env.DATABASE_URL,
  SESSION_SECRET: process.env.SESSION_SECRET,
  PGHOST: process.env.PGHOST,
  PGUSER: process.env.PGUSER,
  PGPASSWORD: process.env.PGPASSWORD
};

Object.entries(criticalSecrets).forEach(([key, value]) => {
  if (value) {
    const maskedValue = key.includes('PASSWORD') || key.includes('SECRET') || key.includes('URL') 
      ? `${value.substring(0, 10)}***` 
      : value;
    console.log(`   ✅ ${key}: ${maskedValue}`);
  } else {
    console.log(`   ❌ ${key}: MANQUANTE - SECRET NON SYNCHRONISÉ !`);
  }
});

// 3. Test de connexion base de données
console.log('\n3. Test de connexion base de données:');
if (process.env.DATABASE_URL) {
  try {
    const url = new URL(process.env.DATABASE_URL);
    console.log(`   🏗️  Host: ${url.hostname}`);
    console.log(`   🔌 Port: ${url.port || '5432'}`);
    console.log(`   📊 Database: ${url.pathname.slice(1)}`);
    console.log(`   👤 User: ${url.username}`);
    console.log('   ✅ URL DATABASE_URL format valide');
  } catch (error) {
    console.log(`   ❌ URL DATABASE_URL invalide: ${error.message}`);
  }
} else {
  console.log('   ❌ DATABASE_URL manquante - impossible de tester');
}

// 4. Diagnostic des cookies et sessions
console.log('\n4. Configuration des sessions:');
const isProduction = process.env.NODE_ENV === 'production';
const cookieConfig = {
  secure: isProduction && process.env.REPL_DEPLOYMENT !== 'true',
  sameSite: isProduction ? 'strict' : 'lax',
  httpOnly: true
};

console.log(`   🍪 Cookie secure: ${cookieConfig.secure}`);
console.log(`   🔒 Cookie sameSite: ${cookieConfig.sameSite}`);
console.log(`   🚫 Cookie httpOnly: ${cookieConfig.httpOnly}`);

// 5. Instructions de résolution
console.log('\n5. 🛠️  Instructions de résolution:');
console.log('\n   📋 Vérifications dans les paramètres de déploiement Replit:');

const missingSecrets = Object.entries(criticalSecrets)
  .filter(([key, value]) => !value)
  .map(([key]) => key);

if (missingSecrets.length > 0) {
  console.log('\n   ❗ Secrets manquants à vérifier dans le déploiement:');
  missingSecrets.forEach(secret => {
    console.log(`   → ${secret}`);
  });
  
  console.log('\n   🔧 Actions à effectuer:');
  console.log('   1. Allez dans les paramètres de votre déploiement Replit');
  console.log('   2. Section "Environment Variables" ou "Secrets"');
  console.log('   3. Vérifiez que chaque secret est marqué comme "SYNCED"');
  console.log('   4. Si "UNSYNCED", cliquez pour re-synchroniser');
  console.log('   5. Redéployez l\'application après synchronisation');
} else {
  console.log('   ✅ Tous les secrets semblent présents');
}

// 6. Solutions alternatives
console.log('\n6. 🔄 Solutions alternatives si le problème persiste:');
console.log('\n   Option 1 - Forcer la synchronisation:');
console.log('   → Désactivez puis réactivez la synchronisation générale');
console.log('   → Attendez 1-2 minutes entre les actions');
console.log('\n   Option 2 - Configuration manuelle:');
console.log('   → Désynchronisez les secrets problématiques');
console.log('   → Saisissez manuellement les valeurs dans le déploiement');
console.log('\n   Option 3 - Nouveau déploiement:');
console.log('   → Créez un nouveau déploiement depuis le workspace');
console.log('   → La synchronisation peut mieux fonctionner sur un déploiement frais');

// 7. Commandes de test
console.log('\n7. 🧪 Tests à effectuer après résolution:');
console.log('\n   Test 1 - Vérifier les variables:');
console.log('   curl https://votre-domaine.repl.co/api/health');
console.log('\n   Test 2 - Tester l\'authentification:');
console.log('   curl -X POST https://votre-domaine.repl.co/api/auth/login \\');
console.log('     -H "Content-Type: application/json" \\');
console.log('     -d \'{"email":"test@test.com","password":"test123"}\'');

// 8. Ressources utiles
console.log('\n8. 📚 Ressources utiles:');
console.log('   → Documentation Replit Deployments: https://docs.replit.com/hosting/deployments');
console.log('   → Support Replit: https://replit.com/support');
console.log('   → Guide d\'installation externe: EXTERNAL_INSTALLATION_GUIDE.md');

console.log('\n=================================================');
console.log('🏁 Diagnostic terminé');

// Recommandation finale
if (missingSecrets.length > 0) {
  console.log('\n🎯 RECOMMANDATION: Vérifiez le statut SYNC de chaque secret dans le déploiement');
} else {
  console.log('\n🎯 RECOMMANDATION: Les secrets semblent OK, vérifiez la base de données et les utilisateurs');
}