<?php
namespace YTKNS;

if(!defined('YTKNS_SEM_NAME'))
    define('YTKNS_SEM_NAME', 'b');
if(!defined('YTKNS_SFM_PATH'))
    define('YTKNS_SFM_PATH', sys_get_temp_dir() . DIRECTORY_SEPARATOR . '{04884071-d334-4388-947a-4fd8c4d4f4ea}');

if(!is_file(YTKNS_SFM_PATH))
    touch(YTKNS_SFM_PATH);

$ftok = ftok(YTKNS_SFM_PATH, YTKNS_SEM_NAME);
$semaphore = sem_get($ftok, 1);
if(!sem_acquire($semaphore))
    die('Failed to acquire semaphore.' . PHP_EOL);

try {
    require_once __DIR__ . '/startup.php';

    // Prevent running cron script during maintenance
    if(!YTKNS_MAINTENANCE) {
        // Destroy old sessions
        UserSession::purge();

        // Resynchronise use counts
        Upload::resync(EFFECT_UPLOADS);

        // Destroy orphaned uploads
        Upload::purgeOrphans();

        // Get task queue
        $taskQueue = ZoneTask::queue();

        // Plow through tasks
        // TODO: make task functions modular
        while($task = array_shift($taskQueue)) {
            if(!isset($zoneInfo) || $zoneInfo->getId() !== $task->getZoneId())
                $zoneInfo = $task->getZone();

            switch($task->getName()) {
                case 'screenshot':
                    $zoneInfo->takeScreenshot();
                    break;
            }

            $task->delete();
        }
    }
} finally {
    sem_release($semaphore);
}