<?php
header('Content-Type: application/json');

// المسار الأساسي للملفات - من جذر المشروع
$project_root = realpath(__DIR__ . '/../../..');
$base_path = $project_root; // جلب من جذر المشروع /kkl

// التحقق من الإجراء المطلوب
$action = $_GET['action'] ?? '';

switch ($action) {
    case 'upload':
        handleUpload();
        break;
    case 'create_folder':
        handleCreateFolder();
        break;
    case 'delete':
        handleDelete();
        break;
    case 'download_from_server':
        handleDownloadFromServer();
        break;
    default:
        echo json_encode(['success' => false, 'message' => 'إجراء غير صالح']);
}

function handleUpload() {
    global $base_path;
    
    if (!isset($_FILES['files'])) {
        echo json_encode(['success' => false, 'message' => 'لم يتم اختيار ملفات']);
        return;
    }
    
    $current_path = $_POST['current_path'] ?? '';
    $target_dir = $current_path ? $base_path . '/' . $current_path : $base_path;
    
    // التحقق من أن المسار آمن
    $real_target = realpath($target_dir);
    if ($real_target === false || strpos($real_target, $base_path) !== 0) {
        echo json_encode(['success' => false, 'message' => 'مسار غير صالح']);
        return;
    }
    
    $uploaded_files = [];
    $errors = [];
    
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $file_name = $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_error = $_FILES['files']['error'][$key];
        
        if ($file_error !== UPLOAD_ERR_OK) {
            $errors[] = "خطأ في رفع الملف: $file_name";
            continue;
        }
        
        // تنظيف اسم الملف
        $file_name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $file_name);
        $target_file = $target_dir . '/' . $file_name;
        
        // التحقق من وجود الملف
        if (file_exists($target_file)) {
            $file_info = pathinfo($file_name);
            $file_name = $file_info['filename'] . '_' . time() . '.' . $file_info['extension'];
            $target_file = $target_dir . '/' . $file_name;
        }
        
        if (move_uploaded_file($tmp_name, $target_file)) {
            $uploaded_files[] = $file_name;
        } else {
            $errors[] = "فشل رفع الملف: $file_name";
        }
    }
    
    if (count($uploaded_files) > 0) {
        echo json_encode([
            'success' => true,
            'message' => 'تم رفع ' . count($uploaded_files) . ' ملف بنجاح',
            'files' => $uploaded_files,
            'errors' => $errors
        ]);
    } else {
        echo json_encode([
            'success' => false,
            'message' => 'فشل رفع جميع الملفات',
            'errors' => $errors
        ]);
    }
}

function handleCreateFolder() {
    global $base_path;
    
    $folder_name = $_POST['folder_name'] ?? '';
    $current_path = $_POST['current_path'] ?? '';
    
    if (empty($folder_name)) {
        echo json_encode(['success' => false, 'message' => 'اسم المجلد مطلوب']);
        return;
    }
    
    // تنظيف اسم المجلد
    $folder_name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $folder_name);
    
    $target_dir = $base_path . '/' . $current_path . '/' . $folder_name;
    
    // التحقق من أن المسار آمن
    $parent_dir = dirname($target_dir);
    $real_parent = realpath($parent_dir);
    if ($real_parent === false || strpos($real_parent, $base_path) !== 0) {
        echo json_encode(['success' => false, 'message' => 'مسار غير صالح']);
        return;
    }
    
    if (file_exists($target_dir)) {
        echo json_encode(['success' => false, 'message' => 'المجلد موجود بالفعل']);
        return;
    }
    
    if (mkdir($target_dir, 0755, true)) {
        echo json_encode(['success' => true, 'message' => 'تم إنشاء المجلد بنجاح']);
    } else {
        echo json_encode(['success' => false, 'message' => 'فشل إنشاء المجلد']);
    }
}

function handleDelete() {
    global $base_path;
    
    $path = $_POST['path'] ?? '';
    $type = $_POST['type'] ?? '';
    
    if (empty($path)) {
        echo json_encode(['success' => false, 'message' => 'المسار مطلوب']);
        return;
    }
    
    // حماية المجلدات الحساسة
    $protected_folders = ['backend/config', 'backend/database', '.git', '.vscode'];
    foreach ($protected_folders as $protected) {
        if (strpos($path, $protected) === 0) {
            echo json_encode(['success' => false, 'message' => 'هذا المجلد محمي ولا يمكن حذفه']);
            return;
        }
    }
    
    $target_path = $base_path . '/' . $path;
    
    // التحقق من أن المسار آمن
    $real_path = realpath($target_path);
    if ($real_path === false || strpos($real_path, $base_path) !== 0) {
        echo json_encode(['success' => false, 'message' => 'مسار غير صالح']);
        return;
    }
    
    if (!file_exists($target_path)) {
        echo json_encode(['success' => false, 'message' => 'الملف أو المجلد غير موجود']);
        return;
    }
    
    if ($type === 'folder') {
        if (deleteDirectory($target_path)) {
            echo json_encode(['success' => true, 'message' => 'تم حذف المجلد بنجاح']);
        } else {
            echo json_encode(['success' => false, 'message' => 'فشل حذف المجلد']);
        }
    } else {
        if (unlink($target_path)) {
            echo json_encode(['success' => true, 'message' => 'تم حذف الملف بنجاح']);
        } else {
            echo json_encode(['success' => false, 'message' => 'فشل حذف الملف']);
        }
    }
}

function deleteDirectory($dir) {
    if (!file_exists($dir)) {
        return true;
    }
    
    if (!is_dir($dir)) {
        return unlink($dir);
    }
    
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') {
            continue;
        }
        
        if (!deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
            return false;
        }
    }
    
    return rmdir($dir);
}

function handleDownloadFromServer() {
    global $base_path;
    
    $server_url = $_POST['server_url'] ?? '';
    $file_name = $_POST['file_name'] ?? '';
    
    if (empty($server_url)) {
        echo json_encode(['success' => false, 'message' => 'رابط الملف مطلوب']);
        return;
    }
    
    // التحقق من صحة الرابط
    if (!filter_var($server_url, FILTER_VALIDATE_URL)) {
        echo json_encode(['success' => false, 'message' => 'رابط غير صالح']);
        return;
    }
    
    // الحصول على اسم الملف
    if (empty($file_name)) {
        $file_name = basename(parse_url($server_url, PHP_URL_PATH));
        if (empty($file_name)) {
            $file_name = 'downloaded_file_' . time();
        }
    }
    
    // تنظيف اسم الملف
    $file_name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $file_name);
    $target_file = $base_path . '/' . $file_name;
    
    // التحقق من وجود الملف
    if (file_exists($target_file)) {
        $file_info = pathinfo($file_name);
        $file_name = $file_info['filename'] . '_' . time() . (isset($file_info['extension']) ? '.' . $file_info['extension'] : '');
        $target_file = $base_path . '/' . $file_name;
    }
    
    try {
        // تحميل الملف
        $context = stream_context_create([
            'http' => [
                'timeout' => 300, // 5 minutes timeout
                'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
            ]
        ]);
        
        $file_content = @file_get_contents($server_url, false, $context);
        
        if ($file_content === false) {
            echo json_encode(['success' => false, 'message' => 'فشل تحميل الملف من الرابط المحدد']);
            return;
        }
        
        // حفظ الملف
        if (file_put_contents($target_file, $file_content) === false) {
            echo json_encode(['success' => false, 'message' => 'فشل حفظ الملف']);
            return;
        }
        
        echo json_encode([
            'success' => true,
            'message' => 'تم تحميل الملف بنجاح',
            'file_name' => $file_name,
            'file_size' => filesize($target_file)
        ]);
        
    } catch (Exception $e) {
        echo json_encode(['success' => false, 'message' => 'خطأ: ' . $e->getMessage()]);
    }
}
?>
