<?php
/**
 * Cronjob: Erzeugt TTS 10 Minuten bevor ein Wecker klingelt.
 * Speichert den ersetzten Text (z.B. "Guten Morgen Lucas, es ist 7 Uhr 00...") in wecker_tts_cache.
 * Wenn derselbe Text schon gecacht ist, wird kein neues Audio erzeugt.
 *
 * Wird von cronjob.php per include ausgeführt; kann auch standalone aufgerufen werden:
 *   php /var/www/wecker/cronjob/tts_vorwecker.php
 */
$weckerRoot = dirname(__DIR__);
if (!function_exists('function_wecker_hole_aktive')) {
    require $weckerRoot . '/config.php';
    require FUNCTIONS_ROOT . '/functions_db.php';
    require FUNCTIONS_ROOT . '/functions_wecker.php';
    require FUNCTIONS_ROOT . '/functions_common.php';
}
if (!function_exists('function_tts_cache_get')) {
    require defined('FUNCTIONS_ROOT') ? FUNCTIONS_ROOT . '/functions_tts_cache.php' : $weckerRoot . '/functions/functions_tts_cache.php';
}
if (!function_exists('function_tts_generieren')) {
    require defined('FUNCTIONS_ROOT') ? FUNCTIONS_ROOT . '/functions_tts.php' : $weckerRoot . '/functions/functions_tts.php';
}

if (function_exists('function_cache_invalidate')) {
    function_cache_invalidate('wecker_aktive');
}

$weckerListe = function_wecker_hole_aktive();
$wochentageMap = function_wecker_hole_wochentage_alle();
$zeitzone = trim((string) (function_einstellung_hole('zeitzone') ?: 'Europe/Berlin'));
if ($zeitzone === '') {
    $zeitzone = 'Europe/Berlin';
}

$now = new DateTimeImmutable('now', new DateTimeZone($zeitzone));
$maxSekunden = 600; // 10 Minuten: Wecker klingelt in den nächsten 10 Min

foreach ($weckerListe as $wecker) {
    $sprachtext = trim((string) ($wecker['sprachtext'] ?? ''));
    if ($sprachtext === '') {
        continue;
    }

    $id = (int) ($wecker['id'] ?? 0);
    $wochentage = isset($wochentageMap[$id]) ? $wochentageMap[$id] : [];
    $next = function_wecker_naechste_klingelzeit($wecker, $wochentage, $now, $zeitzone);
    if ($next === null) {
        continue;
    }

    $diff = $next->getTimestamp() - $now->getTimestamp();
    if ($diff <= 0 || $diff > $maxSekunden) {
        continue;
    }

    $weckzeit = isset($wecker['weckzeit']) ? substr((string) $wecker['weckzeit'], 0, 5) : '';
    $replacedText = function_tts_text_ersetzen($sprachtext, $next, $weckzeit !== '' ? $weckzeit : null);
    $replacedText = trim($replacedText);
    if ($replacedText === '') {
        continue;
    }

    $cachedFilename = function_tts_cache_get($replacedText);
    if ($cachedFilename !== null) {
        if (function_exists('function_tts_occurrence_set')) {
            function_tts_occurrence_set($id, $next, $cachedFilename, $replacedText);
        }
        continue;
    }

    $result = function_tts_generieren($replacedText, null, ['skip_placeholder_replace' => true]);
    if (!empty($result['ok']) && !empty($result['file'])) {
        function_tts_cache_set($replacedText, $result['file']);
        if (function_exists('function_tts_occurrence_set')) {
            function_tts_occurrence_set($id, $next, $result['file'], $replacedText);
        }
    }
}

return;
