<?php
require_once 'db.php';

// دریافت مسیر جاری از URL
$currentPath = isset($_GET['path']) ? $_GET['path'] : '';
$currentPath = ltrim($currentPath, '/');
// امنیت: جلوگیری از دسترسی به parent directory
if (strpos($currentPath, '..') !== false) {
    die('دسترسی غیرمجاز');
}

$baseDir = __DIR__ . '/repository/';
$fullPath = $baseDir . $currentPath;

// اگر مسیر فایل مستقیم نیست و پوشه نیست
if (!is_dir($fullPath) && !empty($currentPath)) {
    // ممکن است فایل مستقیم خواسته شده باشد که از طریق download.php انجام می‌شود
    header('Location: index.php');
    exit;
}

// دریافت آیتم‌های داخل پوشه جاری
$items = [];
if (is_dir($fullPath)) {
    $dirContent = scandir($fullPath);
    foreach ($dirContent as $item) {
        if ($item[0] === '.') continue; // پوشه‌های مخفی و فایل‌های سیستمی
        $itemPath = $fullPath . '/' . $item;
        $isDir = is_dir($itemPath);
        $size = $isDir ? getDirSize($itemPath) : filesize($itemPath);
        $name = $item;
        $downloadCount = 0;
        $totalDownloads = 0;

        if ($isDir) {
            // محاسبه مجموع دانلود فایل‌های داخل پوشه
            $totalDownloads = getTotalDownloadsInDir($itemPath, $currentPath . '/' . $item);
        } else {
            // دریافت تعداد دانلود این فایل از دیتابیس
            $relativeFilePath = ltrim($currentPath . '/' . $item, '/');
            $stmt = $pdo->prepare("SELECT download_count FROM files WHERE file_path = ?");
            $stmt->execute([$relativeFilePath]);
            $row = $stmt->fetch();
            $downloadCount = $row ? $row['download_count'] : 0;
        }

        $items[] = [
            'name' => $name,
            'is_dir' => $isDir,
            'size' => $size,
            'downloads' => $downloadCount,
            'total_dir_downloads' => $totalDownloads,
            'path' => $currentPath ? $currentPath . '/' . $name : $name
        ];
    }
}

// مرتب‌سازی: پوشه‌ها اول، سپس فایل‌ها
usort($items, function($a, $b) {
    if ($a['is_dir'] === $b['is_dir']) {
        return strcmp($a['name'], $b['name']);
    }
    return $a['is_dir'] ? -1 : 1;
});

// تابع محاسبه حجم پوشه
function getDirSize($dirPath) {
    $size = 0;
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, FilesystemIterator::SKIP_DOTS));
    foreach ($files as $file) {
        if ($file->isFile()) {
            $size += $file->getSize();
        }
    }
    return $size;
}

// تابع محاسبه مجموع دانلود فایل‌های داخل یک پوشه
function getTotalDownloadsInDir($dirPath, $relativeDir) {
    global $pdo;
    $total = 0;
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, FilesystemIterator::SKIP_DOTS));
    foreach ($rii as $file) {
        if ($file->isFile()) {
            $relativeFile = $relativeDir . '/' . $file->getFilename();
            $relativeFile = ltrim($relativeFile, '/');
            $stmt = $pdo->prepare("SELECT download_count FROM files WHERE file_path = ?");
            $stmt->execute([$relativeFile]);
            $row = $stmt->fetch();
            if ($row) {
                $total += $row['download_count'];
            }
        }
    }
    return $total;
}

function formatSize($bytes) {
    if ($bytes >= 1073741824) {
        return number_format($bytes / 1073741824, 2) . ' GB';
    } elseif ($bytes >= 1048576) {
        return number_format($bytes / 1048576, 2) . ' MB';
    } elseif ($bytes >= 1024) {
        return number_format($bytes / 1024, 2) . ' KB';
    } elseif ($bytes > 1) {
        return $bytes . ' bytes';
    } elseif ($bytes == 1) {
        return $bytes . ' byte';
    } else {
        return '0 byte';
    }
}
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>جت آپلود | مخزن فایل داینامیک</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

<header class="site-header">
    <div class="container">
        <h1>📁 جت آپلود</h1>
        <p>مدیریت و دانلود فایل‌ها با آمارگیری خودکار</p>
    </div>
</header>

<section class="search-box">
    <div class="container">
        <input type="text" id="searchInput" placeholder="جستجو در همه فایل‌ها و پوشه‌ها..." class="search-input">
        <button id="resetSearch" class="reset-btn">✖ پاک کردن جستجو</button>
        <p class="result-count">نمایش <span id="visibleCount">0</span> از <span id="totalCount">0</span> آیتم</p>
    </div>
</section>

<main class="files-container">
    <div class="container">
        <div class="breadcrumb">
            <a href="index.php">🏠 ریشه</a>
            <?php
            $parts = explode('/', trim($currentPath, '/'));
            $accum = '';
            foreach ($parts as $i => $part) {
                if ($part === '') continue;
                $accum .= ($accum ? '/' : '') . $part;
                echo " / <a href='?path=" . urlencode($accum) . "'>$part</a>";
            }
            ?>
        </div>
        <div id="filesList" class="files-grid"></div>
    </div>
</main>

<footer class="site-footer">
    <div class="container">
        <p>© 1405 - تمامی حقوق محفوظ است | دانلود مستقیم و امن</p>
    </div>
</footer>

<script>
// ارسال داده‌های PHP به JavaScript
const items = <?php echo json_encode($items); ?>;
const currentPath = <?php echo json_encode($currentPath); ?>;
</script>
<script src="script.js"></script>
</body>
</html>