<?php
/**
 * Automatyczna archiwizacja starych meczów
 * 
 * Ten skrypt powinien być uruchamiany przez CRON co tydzień
 * Przykład konfiguracji cron:
 * 0 2 * * 0 php /path/to/private_html/cron/archive_matches.php
 * (Każdą niedzielę o 2:00 w nocy)
 * 
 * Lub w cPanel/Plesk:
 * Czas: Co tydzień, niedziela, 02:00
 * Komenda: php /home/username/public_html/private_html/cron/archive_matches.php
 */

// Zabezpieczenie - tylko CLI lub z localhost
if (php_sapi_name() !== 'cli') {
    if (!isset($_SERVER['REMOTE_ADDR']) || $_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
        die('Access denied - tylko z CLI lub localhost');
    }
}

// Włączenie raportowania błędów
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/archive_log.txt');

// Timeout 5 minut (archiwizacja może trwać długo)
set_time_limit(300);

// Konfiguracja bazy danych
$host = "localhost";
$db = "togethere_cloud";
$user = "root";
$pass = "HasloDoSQL";

// Funkcja logowania
function logMessage($message) {
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[$timestamp] $message\n";
    echo $logMessage;
    error_log($logMessage, 3, __DIR__ . '/archive_log.txt');
}

try {
    logMessage("=== START Archiwizacja meczów ===");
    
    // Połączenie z bazą danych
    
$pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
    
    logMessage("Połączono z bazą danych");
    
    // Wywołanie procedury archiwizacji
    $stmt = $pdo->prepare("CALL archive_old_matches()");
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($result && isset($result['result'])) {
        logMessage("Wynik archiwizacji: " . $result['result']);
    } else {
        logMessage("Archiwizacja wykonana (brak rekordów do archiwizacji)");
    }
    
    // Sprawdź statystyki
    $stmt = $pdo->query("
        SELECT 
            'Active' as type, COUNT(*) as count 
        FROM matches
        UNION ALL
        SELECT 
            'Archived' as type, COUNT(*) as count 
        FROM matches_archive
    ");
    
    $stats = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    logMessage("Statystyki:");
    foreach ($stats as $stat) {
        logMessage("  - {$stat['type']}: {$stat['count']} meczów");
    }
    
    // Opcjonalnie: wyczyść stare logi (starsze niż 30 dni)
    $logFile = __DIR__ . '/archive_log.txt';
    if (file_exists($logFile) && filesize($logFile) > 5242880) { // 5MB
        logMessage("Log przekroczył 5MB - rotacja logów");
        $oldLog = __DIR__ . '/archive_log_old.txt';
        if (file_exists($oldLog)) {
            unlink($oldLog);
        }
        rename($logFile, $oldLog);
    }
    
    logMessage("=== END Archiwizacja zakończona pomyślnie ===\n");
    
    exit(0); // Sukces
    
} catch (PDOException $e) {
    logMessage("ERROR: Błąd bazy danych - " . $e->getMessage());
    exit(1); // Błąd
} catch (Exception $e) {
    logMessage("ERROR: " . $e->getMessage());
    exit(1); // Błąd
}
?>

