<?php
/**
 * BASİT ÇEVİRİ SCRIPTİ
 * Bu dosyayı çalıştır, bulunduğu dizindeki TÜM dosyaları çevirsin
 * Kullanım: php translate_simple.php
 */

// ============================================
// AYARLAR - Değiştirebilirsin
// ============================================

$extensions = ['html', 'htm', 'php', 'phtml', 'txt', 'css', 'js', 'json', 'xml'];
$exclude_dirs = ['vendor', 'node_modules', 'cache', 'logs', 'tmp', 'backup', '.git'];
$exclude_files = ['translate_simple.php', 'config.php', '.env'];

// ============================================
// ÇEVİRİ FONKSİYONU - MyMemory API (Ücretsiz)
// ============================================

function translateText($text) {
    // Boş veya çok kısa metinleri çevirme
    $text = trim($text);
    if (strlen($text) < 3) return $text;
    
    // Sadece sayı ve sembollerden oluşan metinleri çevirme
    if (preg_match('/^[0-9\s\.,!?@#$%^&*()_+=\-"\']+$/', $text)) return $text;
    
    // URL'leri çevirme
    if (filter_var($text, FILTER_VALIDATE_URL)) return $text;
    
    // API'ye gönder
    $url = 'https://api.mymemory.translated.net/get';
    $params = [
        'q' => $text,
        'langpair' => 'en|tr',
        'de' => 'translator@example.com'
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode == 200 && $response) {
        $data = json_decode($response, true);
        if (isset($data['responseData']['translatedText'])) {
            return $data['responseData']['translatedText'];
        }
    }
    
    return $text;
}

// ============================================
// DOSYA ÇEVİRİ FONKSİYONLARI
// ============================================

function translateHTML($html) {
    // PHP kodlarını koru
    preg_match_all('/<\?php.*?\?>/s', $html, $phpMatches);
    $phpBlocks = $phpMatches[0] ?? [];
    foreach ($phpBlocks as $i => $block) {
        $html = str_replace($block, '{{PHP_' . $i . '}}', $html);
    }
    
    // Script kodlarını koru
    preg_match_all('/<script[^>]*>.*?<\/script>/si', $html, $jsMatches);
    $jsBlocks = $jsMatches[0] ?? [];
    foreach ($jsBlocks as $i => $block) {
        $html = str_replace($block, '{{JS_' . $i . '}}', $html);
    }
    
    // Style kodlarını koru
    preg_match_all('/<style[^>]*>.*?<\/style>/si', $html, $cssMatches);
    $cssBlocks = $cssMatches[0] ?? [];
    foreach ($cssBlocks as $i => $block) {
        $html = str_replace($block, '{{CSS_' . $i . '}}', $html);
    }
    
    // Title'ı çevir
    $html = preg_replace_callback('/<title>(.*?)<\/title>/i', function($m) {
        return '<title>' . translateText($m[1]) . '</title>';
    }, $html);
    
    // Meta description'ı çevir
    $html = preg_replace_callback('/<meta[^>]*name="description"[^>]*content="([^"]*)"[^>]*>/i', function($m) {
        $translated = translateText($m[1]);
        return str_replace('content="' . $m[1] . '"', 'content="' . $translated . '"', $m[0]);
    }, $html);
    
    // Attribute'ları çevir (title, alt, placeholder, value)
    $html = preg_replace_callback('/(title|alt|placeholder|value)=["\']([^"\']*)["\']/i', function($m) {
        if (strlen($m[2]) > 3) {
            return $m[1] . '="' . translateText($m[2]) . '"';
        }
        return $m[0];
    }, $html);
    
    // Tag arası metinleri çevir
    $html = preg_replace_callback('/>([^<]*)</', function($m) {
        $text = trim($m[1]);
        if (strlen($text) > 3 && !preg_match('/^[0-9\s\.,!?@#$%^&*()_+=\-"\']+$/', $text)) {
            return '>' . translateText($text) . '<';
        }
        return $m[0];
    }, $html);
    
    // PHP bloklarını geri koy
    foreach ($phpBlocks as $i => $block) {
        $html = str_replace('{{PHP_' . $i . '}}', $block, $html);
    }
    foreach ($jsBlocks as $i => $block) {
        $html = str_replace('{{JS_' . $i . '}}', $block, $html);
    }
    foreach ($cssBlocks as $i => $block) {
        $html = str_replace('{{CSS_' . $i . '}}', $block, $html);
    }
    
    return $html;
}

function translatePHP($content) {
    // PHP bloklarını bul
    preg_match_all('/<\?php.*?\?>/s', $content, $matches);
    $blocks = $matches[0] ?? [];
    
    foreach ($blocks as $key => $block) {
        $newBlock = $block;
        
        // String'leri çevir
        $newBlock = preg_replace_callback('/["\']([^"\']*)["\']/', function($m) {
            if (strlen($m[1]) > 3 && !strpos($m[1], '$') && !strpos($m[1], 'function')) {
                return '"' . translateText($m[1]) . '"';
            }
            return $m[0];
        }, $newBlock);
        
        // Yorumları çevir
        $newBlock = preg_replace_callback('/\/\/[^\n]*/', function($m) {
            $text = trim(substr($m[0], 2));
            if (strlen($text) > 3) {
                return '// ' . translateText($text);
            }
            return $m[0];
        }, $newBlock);
        
        $newBlock = preg_replace_callback('/\/\*.*?\*\//s', function($m) {
            $text = trim(substr($m[0], 2, -2));
            if (strlen($text) > 3) {
                return '/* ' . translateText($text) . ' */';
            }
            return $m[0];
        }, $newBlock);
        
        $content = str_replace($block, $newBlock, $content);
    }
    
    return $content;
}

function translateJSON($json) {
    $data = json_decode($json, true);
    if ($data === null) return $json;
    
    array_walk_recursive($data, function(&$value) {
        if (is_string($value) && strlen($value) > 3) {
            $value = translateText($value);
        }
    });
    
    return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}

function translateFile($filePath) {
    global $extensions, $exclude_files;
    
    $fileName = basename($filePath);
    $extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
    
    // Hariç tutulan dosyalar
    if (in_array($fileName, $exclude_files)) {
        return ['status' => 'skipped', 'message' => 'Hariç tutulan dosya'];
    }
    
    // Uzantı kontrolü
    if (!in_array($extension, $extensions)) {
        return ['status' => 'skipped', 'message' => 'Desteklenmeyen uzantı: .' . $extension];
    }
    
    // Dosyayı oku
    $content = file_get_contents($filePath);
    if ($content === false) {
        return ['status' => 'error', 'message' => 'Dosya okunamadı!'];
    }
    
    // Boş dosya kontrolü
    if (strlen(trim($content)) < 10) {
        return ['status' => 'skipped', 'message' => 'Dosya çok küçük'];
    }
    
    // Yedek oluştur
    $backupPath = $filePath . '.backup';
    if (!file_exists($backupPath)) {
        copy($filePath, $backupPath);
    }
    
    // Çeviri yap
    $translated = $content;
    
    switch ($extension) {
        case 'html':
        case 'htm':
        case 'xml':
            $translated = translateHTML($content);
            break;
        case 'php':
        case 'phtml':
            $translated = translatePHP($content);
            break;
        case 'json':
            $translated = translateJSON($content);
            break;
        case 'js':
            // JavaScript string'lerini çevir
            $translated = preg_replace_callback('/["\'`]([^"\'`]*)["\'`]/', function($m) {
                if (strlen($m[1]) > 3) {
                    return '"' . translateText($m[1]) . '"';
                }
                return $m[0];
            }, $content);
            break;
        case 'css':
            // CSS content'lerini çevir
            $translated = preg_replace_callback('/content:\s*["\']([^"\']*)["\']/', function($m) {
                if (strlen($m[1]) > 3) {
                    return 'content: "' . translateText($m[1]) . '"';
                }
                return $m[0];
            }, $content);
            break;
        default:
            // Düz metin
            $translated = translateText($content);
    }
    
    // Dosyayı kaydet
    if (file_put_contents($filePath, $translated) !== false) {
        return ['status' => 'success', 'message' => 'Çevrildi (' . number_format(strlen($content)/1024, 2) . ' KB)'];
    } else {
        return ['status' => 'error', 'message' => 'Dosya yazılamadı!'];
    }
}

// ============================================
// DİZİNİ TARA VE ÇEVİR
// ============================================

function scanAndTranslate($dir) {
    global $exclude_dirs;
    
    $results = [
        'total' => 0,
        'translated' => 0,
        'skipped' => 0,
        'errors' => 0,
        'files' => []
    ];
    
    $files = scandir($dir);
    
    foreach ($files as $file) {
        if ($file == '.' || $file == '..') continue;
        
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        
        if (is_dir($path)) {
            if (in_array($file, $exclude_dirs)) {
                $results['skipped']++;
                $results['files'][] = [
                    'name' => $file . '/',
                    'status' => 'skipped',
                    'message' => 'Hariç tutulan dizin'
                ];
                continue;
            }
            // Alt dizine gir
            $subResults = scanAndTranslate($path);
            $results['total'] += $subResults['total'];
            $results['translated'] += $subResults['translated'];
            $results['skipped'] += $subResults['skipped'];
            $results['errors'] += $subResults['errors'];
            $results['files'] = array_merge($results['files'], $subResults['files']);
            continue;
        }
        
        $results['total']++;
        $result = translateFile($path);
        $results['files'][] = [
            'name' => $file,
            'status' => $result['status'],
            'message' => $result['message']
        ];
        
        if ($result['status'] == 'success') $results['translated']++;
        elseif ($result['status'] == 'skipped') $results['skipped']++;
        elseif ($result['status'] == 'error') $results['errors']++;
    }
    
    return $results;
}

// ============================================
// SCRIPTİ ÇALIŞTIR
// ============================================

echo "========================================\n";
echo "  DOSYA ÇEVİRİ SCRIPTİ\n";
echo "  İngilizce → Türkçe\n";
echo "========================================\n\n";

echo "Çalışma Dizini: " . __DIR__ . "\n";
echo "Dosya Uzantıları: " . implode(', ', $extensions) . "\n\n";

echo "Çeviri başlatılıyor...\n\n";

$startTime = microtime(true);
$results = scanAndTranslate(__DIR__);
$endTime = microtime(true);

echo "\n========================================\n";
echo "  İŞLEM TAMAMLANDI!\n";
echo "========================================\n";
echo "Toplam Dosya: " . $results['total'] . "\n";
echo "✅ Çevrilen: " . $results['translated'] . "\n";
echo "⏭️ Atlanan: " . $results['skipped'] . "\n";
echo "❌ Hata: " . $results['errors'] . "\n";
echo "⏱️ Süre: " . round($endTime - $startTime, 2) . " saniye\n";
echo "========================================\n\n";

// Detaylı rapor
echo "DETAYLI RAPOR:\n";
echo "----------------------------------------\n";
foreach ($results['files'] as $file) {
    $icon = $file['status'] == 'success' ? '✅' : ($file['status'] == 'error' ? '❌' : '⏭️');
    echo $icon . " " . $file['name'] . " - " . $file['message'] . "\n";
}

echo "\n💡 Yedek dosyaları (.backup) kontrol et.\n";
echo "📝 Log dosyası: translation_log.txt\n";