<?php
// Configuration
define('PASSWORD', 'votre_mot_de_passe');
define('FILES_DIR', './file');
define('FILES_PER_PAGE', 50);

session_start();
$authenticated = isset($_SESSION['authenticated']) && $_SESSION['authenticated'];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['password']) && $_POST['password'] === PASSWORD) {
        $_SESSION['authenticated'] = true;
        $authenticated = true;
    } elseif (isset($_POST['page'])) {
        // API pour le chargement progressif
        $page = intval($_POST['page']);
        $sortBy = $_POST['sortBy'] ?? 'date';
        $sortDesc = $_POST['sortDesc'] ?? 'true';
        
        $files = getFiles($page, $sortBy, $sortDesc === 'true');
        header('Content-Type: application/json');
        echo json_encode($files);
        exit;
    }
}

function getFiles($page = 0, $sortBy = 'date', $sortDesc = true) {
    $allFiles = array_diff(scandir(FILES_DIR), ['.', '..']);
    $files = [];
    
    foreach ($allFiles as $file) {
        $path = FILES_DIR . '/' . $file;
        if (is_file($path)) {
            $files[] = [
                'name' => $file,
                'url' => 'file/' . rawurlencode($file),
                'shareUrl' => 'share/' . rawurlencode($file),
                'date' => filemtime($path),
                'type' => strtolower(pathinfo($file, PATHINFO_EXTENSION))
            ];
        }
    }

    // Tri
    usort($files, function($a, $b) use ($sortBy, $sortDesc) {
        $result = $sortBy === 'date' 
            ? $b['date'] - $a['date']
            : strcasecmp($a['name'], $b['name']);
        return $sortDesc ? $result : -$result;
    });

    // Pagination
    $offset = $page * FILES_PER_PAGE;
    return array_slice($files, $offset, FILES_PER_PAGE);
}

if (!$authenticated) {
    // Afficher le formulaire de connexion
    include 'header.php';
    ?>
    <form class="login-form" method="POST">
        <input type="password" name="password" placeholder="Mot de passe">
        <button type="submit">Accéder</button>
    </form>
    <?php
    include 'footer.php';
    exit;
}

$initialFiles = getFiles();
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Galerie de fichiers</title>
    <style>
        :root {
            --bg-dark: #1a1a1a;
            --bg-card: #2d2d2d;
            --color-beige: #d4c4a8;
            --color-beige-dark: #8b7355;
        }

        body {
            background: var(--bg-dark);
            color: var(--color-beige);
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
        }

        .controls {
            position: sticky;
            top: 0;
            background: var(--bg-dark);
            padding: 10px 0;
            margin-bottom: 20px;
            z-index: 100;
        }

        .grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
            gap: 20px;
        }

        .file-card {
            background: var(--bg-card);
            border-radius: 8px;
            overflow: hidden;
        }

        .preview {
            height: 150px;
            position: relative;
            background: #000;
        }

        .preview img, .preview video {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            object-fit: contain;
        }

        .preview audio {
            position: absolute;
            bottom: 10px;
            left: 5%;
            width: 90%;
        }

        .info {
            padding: 10px;
        }

        .date {
            font-size: 0.8em;
            color: var(--color-beige-dark);
        }

        #loading {
            text-align: center;
            padding: 20px;
            display: none;
        }

        .file-icon {
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            padding: 10px;
            text-align: center;
            word-break: break-word;
            font-size: 1.2em;
        }

        .info .name {
            color: var(--color-beige);
            text-decoration: none;
            word-break: break-all;
            display: block;
            padding: 5px 0;
        }

.info .name:hover {
    color: white;
    text-decoration: underline;
}
    </style>
</head>
<body>
    <div class="controls">
        <button onclick="changeSortBy('date')" id="sortDate">
            Date <?= $sortBy === 'date' ? ($sortDesc ? '↓' : '↑') : '' ?>
        </button>
        <button onclick="changeSortBy('name')" id="sortName">
            Nom <?= $sortBy === 'name' ? ($sortDesc ? '↓' : '↑') : '' ?>
        </button>
    </div>

    <div class="grid" id="fileGrid">
    </div>
    <div id="loading">Chargement...</div>

    <script>
    let page = 0;
    let loading = false;
    let sortBy = 'date';
    let sortDesc = true;
    let noMoreFiles = false;

function createFileCard(file) {
    const card = document.createElement('div');
    card.className = 'file-card';
    
    const preview = document.createElement('div');
    preview.className = 'preview';
    
    const ext = file.type.toLowerCase();
    let previewContent = '';
    
    if (['jpg', 'jpeg', 'png', 'gif'].includes(ext)) {
        previewContent = `<img src="${file.url}" loading="lazy" alt="${file.name}">`;
    } else if (['mp3', 'flac', 'ogg'].includes(ext)) {
        previewContent = `<audio controls src="${file.url}"></audio>`;
    } else if (['mp4', 'webm', 'wmv'].includes(ext)) {
        previewContent = `<video controls loading="lazy"><source src="${file.url}" type="video/${ext}"></video>`;
    } else {
        const icon = getFileIcon(ext);
        previewContent = `<div class="file-icon">${icon} ${file.name}</div>`;
    }
    
    card.innerHTML = `
        <div class="preview">${previewContent}</div>
        <div class="info">
            <a href="${file.shareUrl}" target="_blank" class="name" title="Ouvrir dans un nouvel onglet">${file.name}</a>
            <div class="date">${new Date(file.date * 1000).toLocaleString()}</div>
        </div>
    `;
    
    return card;
}

function getFileIcon(ext) {
    const icons = {
        'pdf': '📄',
        'zip': '📦',
        'rar': '📦',
        'txt': '📝',
        'm3u': '🎵',
        'm3u8': '🎵',
        'css': '📰'
    };
    return icons[ext] || '📎';
}

    async function loadFiles() {
        if (loading || noMoreFiles) return;
        
        loading = true;
        document.getElementById('loading').style.display = 'block';
        
        const formData = new FormData();
        formData.append('page', page);
        formData.append('sortBy', sortBy);
        formData.append('sortDesc', sortDesc);
        
        try {
            const response = await fetch('', {
                method: 'POST',
                body: formData
            });
            
            const files = await response.json();
            
            if (files.length < <?= FILES_PER_PAGE ?>) {
                noMoreFiles = true;
            }
            
            const grid = document.getElementById('fileGrid');
            files.forEach(file => {
                grid.appendChild(createFileCard(file));
            });
            
            page++;
        } catch (error) {
            console.error('Erreur de chargement:', error);
        } finally {
            loading = false;
            document.getElementById('loading').style.display = 'none';
        }
    }

    function changeSortBy(newSortBy) {
        if (newSortBy === sortBy) {
            sortDesc = !sortDesc;
        } else {
            sortBy = newSortBy;
            sortDesc = true;
        }
        
        // Réinitialiser
        page = 0;
        noMoreFiles = false;
        document.getElementById('fileGrid').innerHTML = '';
        loadFiles();
        
        // Mettre à jour les boutons
        document.getElementById('sortDate').textContent = 
            `Date ${sortBy === 'date' ? (sortDesc ? '↓' : '↑') : ''}`;
        document.getElementById('sortName').textContent = 
            `Nom ${sortBy === 'name' ? (sortDesc ? '↓' : '↑') : ''}`;
    }

    // Détecter le scroll pour charger plus de fichiers
    window.addEventListener('scroll', () => {
        if ((window.innerHeight + window.scrollY) >= document.documentElement.scrollHeight - 500) {
            loadFiles();
        }
    });

    // Charger les premiers fichiers
    loadFiles();
    </script>
</body>
</html>