<?php



// Настройки загрузки
$uploadDir = '../../../userdata/Videos/';

// Убедимся, что директория существует
if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

// Получение параметров из запроса
$chunkIndex = isset($_POST['dzchunkindex']) ? (int)$_POST['dzchunkindex'] : 0;
$totalChunks = isset($_POST['dztotalchunkcount']) ? (int)$_POST['dztotalchunkcount'] : 1;
$fileName = isset($_POST['dzdestinationfile']) ? $_POST['dzdestinationfile'] : '';
$uuid = isset($_POST['dzuuid']) ? $_POST['dzuuid'] : '';

// Проверка входных данных
if (empty($fileName)) {
    die(json_encode(['success' => false, 'message' => 'Имя файла не указано']));
}

// Создадим подпапку для временных чанков, чтобы избежать конфликтов
$tempDir = $uploadDir . 'temp_' . $uuid . '/';
if (!is_dir($tempDir)) {
    mkdir($tempDir, 0755, true);
}

// Путь к временному файлу
$tempFilePath = $tempDir . $chunkIndex;

// Проверка загружаемого файла
if (!isset($_FILES['file']) || $_FILES['file']['error'] != UPLOAD_ERR_OK) {
    die(json_encode([
        'success' => false, 
        'message' => 'Ошибка загрузки файла: ' . 
            (isset($_FILES['file']) ? $_FILES['file']['error'] : 'Файл не был отправлен')
    ]));
}

// Сохраняем загруженный чанк
if (move_uploaded_file($_FILES['file']['tmp_name'], $tempFilePath)) {
    // Проверяем, все ли чанки загружены
    $allChunksUploaded = true;
    
    for ($i = 0; $i < $totalChunks; $i++) {
        if (!file_exists($tempDir . $i)) {
            $allChunksUploaded = false;
            break;
        }
    }
    
    // Если загружены все части, объединяем их
    if ($allChunksUploaded) {
        $finalFilePath = $uploadDir . $fileName;
        $finalFile = fopen($finalFilePath, 'wb');
        
        if (!$finalFile) {
            die(json_encode([
                'success' => false, 
                'message' => 'Не удалось создать итоговый файл'
            ]));
        }
        
        // Объединяем все куски в один
        for ($i = 0; $i < $totalChunks; $i++) {
            $chunkPath = $tempDir . $i;
            $chunkFile = fopen($chunkPath, 'rb');
            
            if (!$chunkFile) {
                fclose($finalFile);
                die(json_encode([
                    'success' => false, 
                    'message' => 'Не удалось открыть чанк ' . $i
                ]));
            }
            
            // Потоковое копирование для экономии памяти
            while (!feof($chunkFile)) {
                fwrite($finalFile, fread($chunkFile, 8192)); // Чтение и запись блоками по 8KB
            }
            
            fclose($chunkFile);
            unlink($chunkPath); // Удаляем временный кусок
        }
        
        fclose($finalFile);
        
        // Удаляем временную директорию
        rmdir($tempDir);
        
        // Возвращаем успешный результат
        echo json_encode([
            'success' => true, 
            'message' => 'Файл успешно загружен',
            'file' => $fileName,
            'path' => $finalFilePath
        ]);
    } else {
        // Не все чанки загружены, сообщаем о частичной загрузке
        echo json_encode([
            'success' => true, 
            'message' => 'Часть ' . ($chunkIndex + 1) . ' из ' . $totalChunks . ' успешно загружена'
        ]);
    }
} else {
    echo json_encode([
        'success' => false, 
        'message' => 'Ошибка при сохранении файла'
    ]);
}
?>