<?php
/*
 * Triggered by WP built in cron or directly by "wp cron event run webien_cron_job"
 *
 * */
namespace Webien\Setup\Cron;
use StoutLogic\AcfBuilder\FieldsBuilder;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

class Cron
{
    static $acfGroup;
    static $log;
    static $cronActive;

    static function init()
    {
        // Start ACF section, (Optional stuff)
        self::$acfGroup = new FieldsBuilder(
            'webien_cron_options', ['title' => __('Automatiska jobb - Cron', 'webien')]
        );

        self::addOptions();

        // End ACF section
        self::$acfGroup
            ->setLocation('options_page', '==', 'acf-options-webien');

        // Build the field group
        $acf_group_array = self::$acfGroup->build();
        // Set menu_order here (lower = appears higher)
        $acf_group_array['menu_order'] = 10;
        acf_add_local_field_group($acf_group_array);


        add_action('webien_cron_job', [__CLASS__, 'run']);

        // Se till att cron är schemalagd
        add_action('init', [__CLASS__, 'schedule']);
    }



    static function addOptions()
    {
        // Check if option 'webien_cron_last_run' exists and is recent
        $cronActive = get_option('webien_cron_last_run', false);
        if(!$cronActive){
            $msg = __('Observera: Cron kanske inte är aktiv. För att dessa automatiska jobb ska köras måste en cron-jobb finnas på servern som anropar WordPress cron-system regelbundet. Kontakta admin om detta meddelande inte försvinner inom 5 min.', 'webien');

            self::$acfGroup
                ->addMessage('webien_cron_info', 'Message', [
                    'label' => '',
                    'message' => $msg,
                    'esc_html' => 0,
                ]);

        }


        self::$acfGroup
            ->addTrueFalse('webien_cron_clear_ls_cache', [
                'label' => __('Rensa LS Cache ("Töm allt")', 'webien'),
                'instructions' => __('Triggar en full cache purge.', 'webien'),
                'default_value' => 0,
                'message' => __('Aktivera', 'webien'),
                'wrapper' => ['width' => '50'],
                //'ui' => 1,
            ])
            ->addNumber('webien_cron_clear_ls_cache_period', [
                'label' => __('Period - LS cache', 'webien'),
                'instructions' => __('Sätt interval när det ska ske (dagar).', 'webien'),
                'default_value' => 7,
                'wrapper' => ['width' => '50'],
            ])
            ->addTrueFalse('webien_cron_elementor_regenerate', [
                'label' => __('Återskapa Elementor CSS ("Regenerate")', 'webien'),
                'instructions' => __('Samma som när man klickar på "Clear Files & Data".', 'webien'),
                'default_value' => 0,
                'message' => __('Aktivera', 'webien'),
                'wrapper' => ['width' => '50'],
                //'ui' => 1,
            ])
            ->addNumber('webien_cron_elementor_regenerate_period', [
                'label' => __('Period - Elementor CSS', 'webien'),
                'instructions' => __('Sätt interval när det ska ske (dagar).', 'webien'),
                'default_value' => 7,
                'wrapper' => ['width' => '50'],
            ]);
    }



    static function schedule()
    {
        if (!wp_next_scheduled('webien_cron_job')) {
            wp_schedule_event(time(), 'daily', 'webien_cron_job');
        }
    }



    static function run()
    {
        // create a log channel
        self::$log = new Logger('Cron');
        self::$log->pushHandler(new StreamHandler(WP_CONTENT_DIR . '/webien.log'));

        self::$log->info('Webien Cron job kontrolleras..');

        $now = current_time('timestamp');

        update_option('webien_cron_last_run', $now, false);

        // === LS CACHE ===
        if (get_field('webien_cron_clear_ls_cache', 'option')) {
            $periodDays = (int) get_field('webien_cron_clear_ls_cache_period', 'option');
            $lastRun = (int) get_option('webien_last_ls_cache_run', 0);

            if ($now - $lastRun >= $periodDays * DAY_IN_SECONDS) {
                error_log('LS Cache purge körs...');
                do_action('litespeed_purge_all');
                update_option('webien_last_ls_cache_run', $now);
                self::$log->info('LS Cache tömdes');
            }
        }

        // === ELEMENTOR CSS ===
        if (get_field('webien_cron_elementor_regenerate', 'option')) {
            $periodDays = (int) get_field('webien_cron_elementor_regenerate_period', 'option');
            $lastRun = (int) get_option('webien_last_elementor_regen_run', 0);

            if ($now - $lastRun >= $periodDays * DAY_IN_SECONDS) {
                error_log('Elementor CSS regenereras...');
                if (class_exists('\Elementor\Plugin')) {
                    \Elementor\Plugin::$instance->files_manager->clear_cache();
                    self::$log->info('Elementor CSS regenererad');
                }
                update_option('webien_last_elementor_regen_run', $now);
            }
        }
    }


}
