<?php

if($_SERVER["REMOTE_ADDR"]=='137.184.151.57'){
    $url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $cache_id = md5($url);
    print_r($cache_id);
}


error_reporting(E_ERROR | E_WARNING);
//error_reporting(E_ALL);
ini_set('display_errors', 'On');

if (!file_exists('./inc/db.inc.php')) {
    header('location:./install/');
    exit();
}
session_start();

require_once($_SERVER['DOCUMENT_ROOT'] . '/third/smarty/Smarty.class.php');
$smarty = new Smarty;
$cache_invisible = true;
$smarty->cache_dir = $_SERVER['DOCUMENT_ROOT'] . '/cache/cache_topmore';
$smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'] . '/cache/compile_topmore';
$smarty->template_dir = $_SERVER['DOCUMENT_ROOT'] . '/template/frontend/realia';

if (isset($_GET['gcache_clear'])) {
    $smarty->clearAllCache();
    $current_url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $clean_url = preg_replace('/[?&]gcache_clear(=[^&]*)?/', '', $current_url);
    $clean_url = preg_replace('/[?&]gcache(=[^&]*)?/', '', $clean_url);
    if (strpos($current_url, '?') !== false && (strpos($current_url, 'gcache') !== false || strpos($current_url, 'gcache_clear') !== false)) {
        $clean_url = rtrim($clean_url, '?&');
    }
    header('Location: ' . $clean_url);
    exit();
}

// =====================================================================
// ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ КЕШИРОВАНИЯ
// =====================================================================
if (isset($_SESSION['user_id'])) {
    // Авторизованным пользователям отдаем динамику без кеша
    $cache_invisible = false;
} else {
    // Гостям отдаем кешированную версию
    $smarty->caching = 1;
    $smarty->cache_lifetime = 86400; // 1 сутки по умолчанию
    if (stripos($_SERVER['REQUEST_URI'], 'realty')) {
        $smarty->cache_lifetime = 3600000;
    }
    $smarty->compile_check = true;

    $url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $cache_id = md5($url);
}

// =====================================================================
// РЕНДЕРИНГ И МОНИТОРИНГ КЕША
// =====================================================================
if ($cache_invisible) {
    $is_cached = $smarty->isCached('main.tpl', $cache_id);

    // 1. Если кеша нет — передаем параметры генерации в Smarty
    if (!$is_cached) {
        $cache_generation_date = date('Y-m-d H:i:s');
        $smarty->assign('cache_generation_date', $cache_generation_date);
        $smarty->assign('cache_id', $cache_id);
        $smarty->assign('cache_url', $url);
        $smarty->assign('cache_lifetime', $smarty->cache_lifetime);

        // Инициализация ядра CMS и выборка данных
        topmore_load();

        // Повторное назначение на случай перезаписи переменных в CMS
        $smarty->assign('cache_generation_date', $cache_generation_date);
        $smarty->assign('cache_id', $cache_id);
        $smarty->assign('cache_url', $url);
        $smarty->assign('cache_lifetime', $smarty->cache_lifetime);
    }

    // 2. Определение времени создания кеш-файла и вычисление возраста
    $cache_file_time = 0;
    if ($is_cached) {
        $cache_files = glob($smarty->cache_dir . '/' . $cache_id . '*.main.tpl.php');
        if (!empty($cache_files) && file_exists($cache_files[0])) {
            $cache_file_time = filemtime($cache_files[0]);
        }
    } else {
        $cache_file_time = time();
    }
    
    $cache_age_sec = ($is_cached && $cache_file_time > 0) ? (time() - $cache_file_time) : 0;
    $cache_created_str = $cache_file_time > 0 ? date('Y-m-d H:i:s', $cache_file_time) : date('Y-m-d H:i:s');

    // 3. Отправка диагностических HTTP-заголовков
    if (!headers_sent()) {
        header('X-Cache-Status: ' . ($is_cached ? 'HIT' : 'MISS'));
        header('X-Cache-Generated: ' . $cache_created_str);
        header('X-Cache-Age: ' . $cache_age_sec . 's');
        header('X-Cache-ID: ' . $cache_id);
    }

    // 4. Отображение шаблона (из кеша либо с сохранением в кеш)
    $smarty->display('main.tpl', $cache_id);

    // 5. Динамический комментарий в конце страницы
    if ($is_cached) {
        $age_str = topmore_format_cache_age($cache_age_sec);
        echo "\n<!-- [TOPMORE CACHE HIT] Served at: " . date('Y-m-d H:i:s') . " | Cache age: " . $age_str . " -->\n";
    } else {
        echo "\n<!-- [TOPMORE CACHE MISS] Fresh generation at: " . $cache_created_str . " | Saved to cache -->\n";
    }
} else {
    // Ветка авторизованного пользователя
    topmore_load();
    if (!headers_sent()) {
        header('X-Cache-Status: BYPASS');
    }
    $smarty->display('main.tpl');
    echo "\n<!-- [TOPMORE CACHE BYPASS] Authorized user | Generated at: " . date('Y-m-d H:i:s') . " -->\n";
}
exit;

function topmore_load()
{
    global $smarty;

    $settings = parse_ini_file('settings.ini.php', true);
    if (isset($settings['Settings']['estate_folder']) and ($settings['Settings']['estate_folder'] != '')) {
        $folder = '/' . $settings['Settings']['estate_folder'];
    } else {
        $folder = '';
    }
    $estate_folder = $folder;
    global $home_url;
    $home_url = '';
    require_once("inc/db.inc.php");

    $sitebill_document_root = $_SERVER['DOCUMENT_ROOT'] . $folder;
    define('SITEBILL_DOCUMENT_ROOT', $sitebill_document_root);
    define('SITEBILL_MAIN_URL', $folder);
    define('DB_PREFIX', $__db_prefix);
// текущая валюта. функция переопределения текущей валюты должна переопределить эту константу и записать новое значение в сессию.
    if (!defined('CURRENT_CURRENCY')) {
        if (isset($_SESSION['current_currency'])) {
            define('CURRENT_CURRENCY', $_SESSION['current_currency']);
        } else {
            define('CURRENT_CURRENCY', 1);
        }
    }

    ini_set("include_path", $include_path);

//    require_once(SITEBILL_DOCUMENT_ROOT.'/third/smarty/Smarty.class.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/system/init.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/db/MySQL.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/sitebill.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/sitebill_krascap.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/language/russian.php');
    require_once(SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/system/install/install.php');

//    $smarty = new Smarty;

    $init = new Init();
    $init->initGlobals();
    $ETOWN_LANG = new Etown_Lang;
    $install_manager = new Install_Manager();
    if (!$install_manager->main()) {
        echo $install_manager->GetErrorMessage();
        exit;
    }

    if (isset($_REQUEST['_lang'])) {
        $_SESSION['_lang'] = $_REQUEST['_lang'];
    } else {
        if (!isset($_SESSION['_lang'])) {
            $_SESSION['_lang'] = 'ru';
        }
    }


    require_once SITEBILL_DOCUMENT_ROOT . '/apps/system/lib/system/multilanguage/multilanguage.class.php';
    Multilanguage::start('frontend', $_SESSION['_lang']);


    $sitebill = new SiteBill();
    //$smarty->template_dir = SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$sitebill->getConfigValue('theme');
    //$smarty->cache_dir    = SITEBILL_DOCUMENT_ROOT.'/cache/smarty';
    //$smarty->compile_dir  = SITEBILL_DOCUMENT_ROOT.'/cache/compile';

    $sitebill_krascap = new SiteBill_Krascap();
    $sitebill_krascap->main();
}

/**
 * Форматирует возраст кеша в читаемую строку (дни, часы, минуты, секунды)
 * Совместимо с PHP 5.3 - 8.4+
 *
 * @param int $seconds
 * @return string
 */
function topmore_format_cache_age($seconds)
{
    if ($seconds <= 0) {
        return '0s (just now)';
    }
    $days = floor($seconds / 86400);
    $hours = floor(($seconds % 86400) / 3600);
    $minutes = floor(($seconds % 3600) / 60);
    $secs = $seconds % 60;

    $parts = array();
    if ($days > 0) {
        $parts[] = $days . 'd';
    }
    if ($hours > 0) {
        $parts[] = $hours . 'h';
    }
    if ($minutes > 0) {
        $parts[] = $minutes . 'm';
    }
    if ($secs > 0 || empty($parts)) {
        $parts[] = $secs . 's';
    }

    return implode(' ', $parts) . ' (' . $seconds . 's)';
}

function tatmetr_format_cache_age($seconds)
{
    return topmore_format_cache_age($seconds);
}


?>