/**
 * Check Active API Keys in Database
 * Run: npx tsx scripts/check-api-keys.ts
 */

import mongoose from 'mongoose';
import * as dotenv from 'dotenv';
import * as path from 'path';

// Load env
dotenv.config({ path: path.join(__dirname, '../.env') });

// User schema (minimal)
const UserSchema = new mongoose.Schema({
  email: String,
  name: String,
  role: String,
  panelSettings: {
    type: mongoose.Schema.Types.Mixed,
    default: {}
  }
}, { timestamps: true });

const User = mongoose.model('User', UserSchema);

async function main() {
  const mongoUri = process.env.MONGODB_URI;
  if (!mongoUri) {
    console.error('❌ MONGODB_URI not set in .env');
    process.exit(1);
  }

  console.log('🔌 Connecting to MongoDB...');
  await mongoose.connect(mongoUri);
  console.log('✅ Connected\n');

  // Find super admin
  const superAdmin = await User.findOne({ role: 'super-admin' }).lean();

  if (!superAdmin) {
    console.log('❌ No super admin found in database');
    await mongoose.disconnect();
    return;
  }

  console.log('📋 Super Admin Found:');
  console.log(`   Email: ${superAdmin.email}`);
  console.log(`   Name: ${superAdmin.name}`);
  console.log('');

  const aiConfig = (superAdmin as any).panelSettings?.aiConfig;

  if (!aiConfig) {
    console.log('❌ No AI config stored in database');
    console.log('   Using .env fallback keys:');
    console.log(`   CLAUDE_API_KEY: ${maskKey(process.env.CLAUDE_API_KEY)}`);
    console.log(`   ZHIPU_API_KEY: ${maskKey(process.env.ZHIPU_API_KEY)}`);
    console.log(`   OLLAMA_API_KEY: ${maskKey(process.env.OLLAMA_API_KEY)}`);
    await mongoose.disconnect();
    return;
  }

  console.log('🔐 AI Configuration from Database:');
  console.log('─'.repeat(50));
  console.log(`   Provider: ${aiConfig.aiProvider || 'auto'}`);
  console.log(`   Timeout: ${aiConfig.aiTimeout || 120000}ms`);
  console.log(`   Ollama Base URL: ${aiConfig.ollamaBaseUrl || 'default'}`);
  console.log('');

  // Claude Keys
  console.log('📌 Claude API Keys:');
  if (aiConfig.claudeKeys?.length > 0) {
    aiConfig.claudeKeys.forEach((key: any, i: number) => {
      const active = key.isActive ? '⭐ ACTIVE' : '      ';
      console.log(`   ${active} [${i}] ${maskKey(key.key)}`);
    });
  } else {
    console.log('   ❌ No Claude keys in DB');
    console.log(`   🔄 Fallback to .env: ${maskKey(process.env.CLAUDE_API_KEY)}`);
  }
  console.log('');

  // Zhipu Keys
  console.log('📌 Zhipu/GLM API Keys:');
  if (aiConfig.zhipuKeys?.length > 0) {
    aiConfig.zhipuKeys.forEach((key: any, i: number) => {
      const active = key.isActive ? '⭐ ACTIVE' : '      ';
      console.log(`   ${active} [${i}] ${maskKey(key.key)} | Model: ${key.model || 'default'}`);
      if (key.url) console.log(`         URL: ${key.url}`);
    });
  } else {
    console.log('   ❌ No Zhipu keys in DB');
    console.log(`   🔄 Fallback to .env: ${maskKey(process.env.ZHIPU_API_KEY)}`);
  }
  console.log('');

  // Ollama Keys
  console.log('📌 Ollama API Keys:');
  if (aiConfig.ollamaKeys?.length > 0) {
    aiConfig.ollamaKeys.forEach((key: any, i: number) => {
      const active = key.isActive ? '⭐ ACTIVE' : '      ';
      console.log(`   ${active} [${i}] ${maskKey(key.key)} | Model: ${key.model || 'default'}`);
    });
  } else {
    console.log('   ❌ No Ollama keys in DB');
    console.log(`   🔄 Fallback to .env: ${maskKey(process.env.OLLAMA_API_KEY)}`);
  }
  console.log('');

  // Summary
  console.log('─'.repeat(50));
  console.log('📊 CURRENT ACTIVE KEYS:');
  console.log('─'.repeat(50));

  const activeClaude = aiConfig.claudeKeys?.find((k: any) => k.isActive);
  const activeZhipu = aiConfig.zhipuKeys?.find((k: any) => k.isActive);
  const activeOllama = aiConfig.ollamaKeys?.find((k: any) => k.isActive);

  console.log(`   Claude: ${activeClaude ? maskKey(activeClaude.key) + ' (DB)' : maskKey(process.env.CLAUDE_API_KEY) + ' (ENV)'}`);
  console.log(`   Zhipu:  ${activeZhipu ? maskKey(activeZhipu.key) + ' (DB)' : maskKey(process.env.ZHIPU_API_KEY) + ' (ENV)'}`);
  console.log(`   Ollama: ${activeOllama ? maskKey(activeOllama.key) + ' (DB)' : maskKey(process.env.OLLAMA_API_KEY) + ' (ENV)'}`);

  // Determine which provider will be used
  const provider = aiConfig.aiProvider || process.env.AI_PROVIDER || 'auto';
  console.log('');
  console.log(`🎯 Provider Setting: ${provider}`);

  if (provider === 'ollama') {
    console.log('   → Will use Ollama');
  } else if (provider === 'claude') {
    console.log('   → Will use Claude');
  } else if (provider === 'zhipu') {
    console.log('   → Will use Zhipu');
  } else {
    console.log('   → Auto-detect will choose based on key format');
  }

  await mongoose.disconnect();
}

function maskKey(key: string | undefined): string {
  if (!key) return '❌ Not set';
  if (key.length <= 8) return '****' + key.slice(-4);
  return key.slice(0, 4) + '****' + key.slice(-4);
}

main().catch(err => {
  console.error('❌ Error:', err);
  process.exit(1);
});