<?php
$cfg = isset($ap_module_config) && is_array($ap_module_config) ? $ap_module_config : array();

/**
 * Проверяет, попадает ли текущее время сервера в заданный диапазон
 * "ЧЧ:ММ"–"ЧЧ:ММ". Пустые/некорректные значения = "без ограничения".
 * Поддерживает диапазоны через полночь (from > to).
 */
if (!function_exists('ap_sticky_cta_in_time_window')) {
    function ap_sticky_cta_in_time_window($from, $to)
    {
        $from = trim((string)$from);
        $to = trim((string)$to);
        if ($from === '' || $to === '') {
            return true;
        }

        $timeRe = '/^([01]\d|2[0-3]):([0-5]\d)$/';
        if (!preg_match($timeRe, $from) || !preg_match($timeRe, $to)) {
            // Некорректный формат в настройках — не блокируем показ баннера
            // из-за опечатки администратора, просто игнорируем ограничение.
            return true;
        }

        $now = date('H:i');
        if ($from <= $to) {
            return ($now >= $from && $now <= $to);
        }
        // Диапазон через полночь, например 22:00–06:00.
        return ($now >= $from || $now <= $to);
    }
}

/**
 * Проверяет, попадает ли текущий момент в диапазон дат кампании
 * (старт/окончание показов). Значения приходят из <input type="datetime-local">
 * в формате "YYYY-MM-DDTHH:MM", который strtotime понимает нативно.
 * Пустые/нераспознанные значения = "без ограничения" с этой стороны.
 */
if (!function_exists('ap_sticky_cta_in_schedule')) {
    function ap_sticky_cta_in_schedule($start, $end)
    {
        $start = trim((string)$start);
        $end = trim((string)$end);
        $now = time();

        if ($start !== '') {
            $startTs = strtotime($start);
            if ($startTs !== false && $now < $startTs) {
                return false;
            }
        }
        if ($end !== '') {
            $endTs = strtotime($end);
            if ($endTs !== false && $now > $endTs) {
                return false;
            }
        }
        return true;
    }
}

$timeFrom = isset($cfg['time_from']) ? $cfg['time_from'] : '';
$timeTo = isset($cfg['time_to']) ? $cfg['time_to'] : '';
if (!ap_sticky_cta_in_time_window($timeFrom, $timeTo)) {
    // Вне окна показа по времени суток — ничего не выводим на этой загрузке.
    return;
}

$scheduleStart = isset($cfg['schedule_start']) ? $cfg['schedule_start'] : '';
$scheduleEnd = isset($cfg['schedule_end']) ? $cfg['schedule_end'] : '';
if (!ap_sticky_cta_in_schedule($scheduleStart, $scheduleEnd)) {
    // Вне диапазона дат кампании — ничего не выводим на этой загрузке.
    return;
}

$ctaText = isset($cfg['cta_text']) ? $cfg['cta_text'] : '';
$buttonText = (isset($cfg['button_text']) && $cfg['button_text'] !== '') ? $cfg['button_text'] : 'Узнать больше';
$buttonActionType = (isset($cfg['button_action_type']) && $cfg['button_action_type'] === 'click_selector') ? 'click_selector' : 'link';
$buttonUrl = isset($cfg['button_url']) ? $cfg['button_url'] : '#';
$clickSelector = isset($cfg['click_selector']) ? $cfg['click_selector'] : '';

$position = isset($cfg['position']) ? $cfg['position'] : 'bottom';
if (!in_array($position, array('bottom', 'top', 'bottom-right-floating', 'bottom-left-floating'), true)) {
    $position = 'bottom';
}
$style = (isset($cfg['style']) && $cfg['style'] === 'solid') ? 'solid' : 'glass';
$accentColor = (isset($cfg['accent_color']) && $cfg['accent_color'] !== '') ? $cfg['accent_color'] : '#6366f1';

// Ключ теперь всегда присутствует в конфиге благодаря hidden-инпуту
// в админке (module_config[..][closable] = "0" или "1"), поэтому
// отсутствие ключа трактуем как старую запись/дефолт = включено.
$closable = (isset($cfg['closable']) ? $cfg['closable'] : '1') !== '0';

$scrollTrigger = isset($cfg['scroll_trigger_percent']) ? (float)$cfg['scroll_trigger_percent'] : 40;
if ($scrollTrigger < 0) $scrollTrigger = 0;
if ($scrollTrigger > 100) $scrollTrigger = 100;

$showLimit = isset($cfg['show_limit']) ? (int)$cfg['show_limit'] : 1;
if ($showLimit < 1) {
    $showLimit = 1;
}
$hideAfterCloseDays = isset($cfg['hide_after_close_days']) ? (int)$cfg['hide_after_close_days'] : 7;
if ($hideAfterCloseDays < 0) {
    $hideAfterCloseDays = 0;
}

$goalShow = isset($cfg['goal_show']) ? trim($cfg['goal_show']) : '';
$goalClick = isset($cfg['goal_click']) ? trim($cfg['goal_click']) : '';
$btnCss = isset($cfg['btn_css']) ? trim($cfg['btn_css']) : '';

// Не даём вставленному коду/CSS разорвать окружающий <script>/<style> тег,
// даже если админ случайно вставит в поле что-то вроде "</script>".
$goalShowSafe = str_replace('</script', '<\/script', $goalShow);
$goalClickSafe = str_replace('</script', '<\/script', $goalClick);
$btnCssSafe = str_replace('</style', '<\/style', $btnCss);

$version = trim(@file_get_contents(__DIR__ . '/version.txt'));
$cssPath = '/ap_system/modules/sticky-cta/sticky-cta.css';
$jsPath  = '/ap_system/modules/sticky-cta/sticky-cta.js';
?>
<link rel="stylesheet" href="<?php echo htmlspecialchars($cssPath); ?>?v=<?php echo urlencode($version); ?>">
<?php if ($btnCssSafe !== ''): ?>
<style>
/* Более специфичный селектор (#id .class), чем базовый в sticky-cta.css —
   гарантированно переопределяет дефолтный стиль кнопки. */
#ap-sticky-cta .ap-sticky-cta__btn {
<?php echo $btnCssSafe; ?>

}
</style>
<?php endif; ?>
<div id="ap-sticky-cta"
     class="ap-sticky-cta ap-sticky-cta--<?php echo htmlspecialchars($position, ENT_QUOTES); ?> ap-sticky-cta--style-<?php echo htmlspecialchars($style, ENT_QUOTES); ?><?php echo $closable ? ' ap-sticky-cta--has-close' : ''; ?>"
     style="--ap-sticky-accent: <?php echo htmlspecialchars($accentColor, ENT_QUOTES); ?>;"
     data-scroll-trigger-percent="<?php echo htmlspecialchars((string)$scrollTrigger, ENT_QUOTES); ?>"
     data-show-limit="<?php echo (int)$showLimit; ?>"
     data-hide-after-close-days="<?php echo (int)$hideAfterCloseDays; ?>"
     data-button-action-type="<?php echo htmlspecialchars($buttonActionType, ENT_QUOTES); ?>"
     data-click-selector="<?php echo htmlspecialchars($clickSelector, ENT_QUOTES); ?>">
    <?php if ($closable): ?>
        <button type="button" class="ap-sticky-cta__close" aria-label="Закрыть">&times;</button>
    <?php endif; ?>
    <div class="ap-sticky-cta__container">
        <?php if ($ctaText !== ''): ?>
            <div class="ap-sticky-cta__text"><?php echo nl2br(htmlspecialchars($ctaText)); ?></div>
        <?php endif; ?>
        <?php if ($buttonActionType === 'click_selector'): ?>
            <button type="button" class="ap-sticky-cta__btn" id="ap-sticky-cta__button"><?php echo htmlspecialchars($buttonText); ?></button>
        <?php else: ?>
            <a href="<?php echo htmlspecialchars($buttonUrl, ENT_QUOTES); ?>" class="ap-sticky-cta__btn" id="ap-sticky-cta__button"><?php echo htmlspecialchars($buttonText); ?></a>
        <?php endif; ?>
    </div>
</div>
<script>
window.__apStickyCtaGoals = window.__apStickyCtaGoals || {};
window.__apStickyCtaGoals.onShow = function () {
<?php echo $goalShowSafe; ?>

};
window.__apStickyCtaGoals.onClick = function () {
<?php echo $goalClickSafe; ?>

};
</script>
<script src="<?php echo htmlspecialchars($jsPath); ?>?v=<?php echo urlencode($version); ?>" defer></script>
