const crypto = require('crypto');
const { PrismaClient } = require('@prisma/client');

console.log('🔐 GÉNÉRATION TOKEN AVEC VRAI ADMIN\n');
console.log('='.repeat(50));

const prisma = new PrismaClient();
const JWT_SECRET = 'mySuperSecretKey123';

async function generateTokenWithRealAdmin() {
  try {
    // Lire l'ID admin sauvegardé
    let adminId;
    try {
      adminId = require('fs').readFileSync('admin-id.txt', 'utf8').trim();
    } catch (error) {
      console.log('❌ ID admin non trouvé. Exécutez d\'abord use-existing-admin.js');
      return;
    }

    // Récupérer les infos complètes de l'admin
    const adminUser = await prisma.user.findUnique({
      where: { id: adminId },
      select: {
        id: true,
        email: true,
        role: true,
        permissions: true,
        active: true
      }
    });

    if (!adminUser) {
      console.log('❌ Admin non trouvé avec ID:', adminId);
      return;
    }

    console.log('✅ ADMIN SÉLECTIONNÉ:');
    console.log('   ID:', adminUser.id);
    console.log('   Email:', adminUser.email);
    console.log('   Role:', adminUser.role);
    console.log('   Active:', adminUser.active);
    console.log('   Permissions:', adminUser.permissions);

    if (!adminUser.active) {
      console.log('❌ Cet admin n\'est pas actif');
      return;
    }

    // Générer le token JWT avec le bon format
    const payload = {
      id: adminUser.id,
      email: adminUser.email,
      role: adminUser.role,
      permissions: adminUser.permissions || ['Services', 'Users', 'Companies', 'WP']
    };

    const header = {
      alg: 'HS256',
      typ: 'JWT'
    };

    function base64urlEncode(str) {
      return Buffer.from(JSON.stringify(str))
        .toString('base64')
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=/g, '');
    }

    const encodedHeader = base64urlEncode(header);
    const encodedPayload = base64urlEncode(payload);

    const signature = crypto
      .createHmac('sha256', JWT_SECRET)
      .update(encodedHeader + '.' + encodedPayload)
      .digest('base64')
      .replace(/\+/g, '-')
      .replace(/\//g, '_')
      .replace(/=/g, '');

    const token = encodedHeader + '.' + encodedPayload + '.' + signature;

    console.log('\n🎉 TOKEN JWT GÉNÉRÉ:');
    console.log('====================================');
    console.log(token);
    console.log('====================================');

    // Sauvegarder le token
    require('fs').writeFileSync('real-admin-token.txt', token);
    console.log('💾 Token sauvegardé dans: real-admin-token.txt');

    console.log('\n🚀 POUR TESTER:');
    console.log('curl -H "Authorization: Bearer ' + token + '" http://localhost:8000/api/admin/wp/forms/business-plan/');

  } catch (error) {
    console.log('❌ ERREUR:', error.message);
  } finally {
    await prisma.$disconnect();
  }
}

generateTokenWithRealAdmin().catch(console.error);
