#!/usr/bin/env node
/**
 * SKYNEURMA - Otomatik Kurulum Scripti
 * Bu script tek komutla tüm sistemi kurar:
 * 1. .env.example → .env kopyalar
 * 2. ENCRYPTION_KEY otomatik üretir
 * 3. Backend bağımlılıklarını yükler
 * 4. Frontend bağımlılıklarını yükler
 * 5. Frontend'i build eder
 * 6. Sistemi başlatır
 */

const { execSync } = require('child_process');
const { existsSync, readFileSync, writeFileSync, copyFileSync } = require('fs');
const { resolve } = require('path');
const crypto = require('crypto');

const ROOT = resolve(__dirname, '..');
const WEB = resolve(ROOT, 'web');

const colors = {
  reset: '\x1b[0m',
  green: '\x1b[32m',
  yellow: '\x1b[33m',
  cyan: '\x1b[36m',
  red: '\x1b[31m',
  bold: '\x1b[1m',
  dim: '\x1b[2m',
};

function log(msg) { console.log(`${colors.cyan}[SKYNEURMA]${colors.reset} ${msg}`); }
function success(msg) { console.log(`${colors.green}  ✓${colors.reset} ${msg}`); }
function warn(msg) { console.log(`${colors.yellow}  ⚠${colors.reset} ${msg}`); }
function error(msg) { console.log(`${colors.red}  ✗${colors.reset} ${msg}`); }

function run(cmd, cwd = ROOT) {
  try {
    execSync(cmd, { cwd, stdio: 'inherit' });
    return true;
  } catch {
    return false;
  }
}

console.log(`
${colors.bold}${colors.cyan}╔══════════════════════════════════════════════╗
║         SKYNEURMA Kurulum Sihirbazı          ║
║              by Baever                        ║
╚══════════════════════════════════════════════╝${colors.reset}
`);

// Step 1: .env dosyası
log('Adım 1/5: .env dosyası kontrol ediliyor...');
const envPath = resolve(ROOT, '.env');
const envExamplePath = resolve(ROOT, '.env.example');

if (existsSync(envPath)) {
  const content = readFileSync(envPath, 'utf-8');
  if (content.includes('ENCRYPTION_KEY=') && !content.match(/ENCRYPTION_KEY=\s*$/m) && !content.includes('ENCRYPTION_KEY=\n')) {
    success('.env dosyası zaten mevcut ve ENCRYPTION_KEY dolu');
  } else {
    // ENCRYPTION_KEY boş, üret
    const key = crypto.randomBytes(32).toString('hex');
    const updated = content.replace(/ENCRYPTION_KEY=.*/, `ENCRYPTION_KEY=${key}`);
    writeFileSync(envPath, updated);
    success(`ENCRYPTION_KEY otomatik üretildi`);
  }
} else if (existsSync(envExamplePath)) {
  const content = readFileSync(envExamplePath, 'utf-8');
  const key = crypto.randomBytes(32).toString('hex');
  const updated = content.replace(/ENCRYPTION_KEY=.*/, `ENCRYPTION_KEY=${key}`);
  writeFileSync(envPath, updated);
  success('.env.example kopyalandı ve ENCRYPTION_KEY üretildi');
} else {
  // Hiçbiri yok, sıfırdan oluştur
  const key = crypto.randomBytes(32).toString('hex');
  const envContent = `PORT=3001
NODE_ENV=development
ENCRYPTION_KEY=${key}

# API keys - panelden girilecek
OPENROUTER_API_KEY=
KIE_API_KEY=
WEBHOOK_BASE_URL=

# Telegram MTProto - panelden girilecek
TELEGRAM_API_ID=0
TELEGRAM_API_HASH=
`;
  writeFileSync(envPath, envContent);
  success('.env dosyası oluşturuldu ve ENCRYPTION_KEY üretildi');
}

// Step 2: Backend dependencies
log('Adım 2/5: Backend bağımlılıkları yükleniyor...');
if (!run('npm install', ROOT)) {
  error('Backend npm install başarısız!');
  process.exit(1);
}
success('Backend bağımlılıkları yüklendi');

// Step 3: Frontend dependencies
log('Adım 3/5: Frontend bağımlılıkları yükleniyor...');
if (!run('npm install', WEB)) {
  error('Frontend npm install başarısız!');
  process.exit(1);
}
success('Frontend bağımlılıkları yüklendi');

// Step 4: Frontend build
log('Adım 4/5: Frontend build ediliyor...');
if (!run('npm run build', WEB)) {
  error('Frontend build başarısız!');
  process.exit(1);
}
success('Frontend build tamamlandı');

// Step 5: Done
log('Adım 5/5: Kurulum tamamlandı!');

console.log(`
${colors.bold}${colors.green}══════════════════════════════════════════════
  Kurulum başarıyla tamamlandı!
══════════════════════════════════════════════${colors.reset}

${colors.cyan}Sistemi başlatmak için:${colors.reset}
  ${colors.bold}npm run dev${colors.reset}       ${colors.dim}(Geliştirme modu)${colors.reset}
  ${colors.bold}npm run build && npm start${colors.reset}  ${colors.dim}(Prodüksiyon)${colors.reset}

${colors.cyan}Panel erişimi:${colors.reset}
  ${colors.bold}http://localhost:3001${colors.reset}

${colors.yellow}Sonraki adımlar:${colors.reset}
  1. Panelden API anahtarlarını girin (Ayarlar > API)
     - OpenRouter API Key (AI sohbet için)
     - KIE API Key (fotoğraf üretimi için)
  2. Telegram Bot oluşturun (@BotFather)
  3. Karakter DNA'sı oluşturun (Karakterler > Yeni)
  4. Botu başlatın ve test edin
`);
