<?php
defined('ABSPATH') || exit;
/**
 * Create initial categories and events on plugin activation.
 */
function termin_kalender_first_run()
{
    try {
        // ------------------------------------------------------------------------------
        // Create initial categories if none exist.
        if (empty(get_option('termin_kalender_kategorien'))) {
            $categories = [
                [
                    'categoryID' => uniqid(),
                    'label' => __('Tasks', 'termin-kalender'),
                    'backgroundColor' => '#2051CC',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-yes',
                ],
                [
                    'categoryID' => uniqid(),
                    'label' => __('Events', 'termin-kalender'),
                    'backgroundColor' => '#3DA3DE',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-tickets',
                ],
                [
                    'categoryID' => uniqid(),
                    'label' => __('Private dates', 'termin-kalender'),
                    'backgroundColor' => '#0E9AA4',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-universal-access',
                ],
                [
                    'categoryID' => uniqid(),
                    'label' => __('Meeting', 'termin-kalender'),
                    'backgroundColor' => '#5B9C35',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-clock',
                ],
                [
                    'categoryID' => uniqid(),
                    'label' => __('Holidays and absences', 'termin-kalender'),
                    'backgroundColor' => '#8A9E05',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-palmtree',
                ],
                [
                    'categoryID' => uniqid(),
                    'label' => __('Important Reminder', 'termin-kalender'),
                    'backgroundColor' => '#B42808',
                    'textColor' => '#FFFFFF',
                    'icon' => 'dashicons-flag',
                ]
            ];
            // Save the categories as a JSON string.
            update_option('termin_kalender_kategorien', json_encode($categories), false);
        }

        // ------------------------------------------------------------------------------
        // Create events if none exist.
        // Also check if there are no events in the system so we can inject the demo data.
        $has_events = false;
        if (class_exists('Termin_Kalender_Event_Repository')) {
            $has_events = !empty(Termin_Kalender_Event_Repository::get_events());
        } else {
            $events_opt = (string) get_option('termin_kalender_events');
            $decoded = $events_opt ? json_decode($events_opt, true) : [];
            $has_events = !empty($decoded);
        }

        if (!$has_events) {
            // Retrieve the categories JSON and decode it into an array.
            //$categories_json = get_option( 'termin_kalender_kategorien', '[]' );
            //$categories      = wp_json_decode( $categories_json, true );
            $categories = json_decode(get_option('termin_kalender_kategorien'), true);
            if (!is_array($categories) || empty($categories)) {
                return;
            }
            $KalenderDaten = [];
            // Start from "today" (UTC); adjust based on your requirements.
            $dayOffset = strtotime('today + 8 hour');
            //-------------------------------------------------------------------------------------------
            $cities = ['350 Fifth Avenue, New York', '221B Baker Street, London', '31 Rue Cambon, Paris', 'Dogenzaka, Shibuya-ku, Tokyo 150-0043, Japan', 'Oxford Street, Sydney', 'Apgujeong-dong, Seoul', 'Unter den Linden, Berlin', 'Marktgasse, Bern', 'Freie Strasse, Basel', 'Chapel Bridge, Luzern'];

            $quotes = ['The best way to predict the future is to invent it. - Alan Kay', 'Life is really simple, but we insist on making it complicated. - Confucius', 'Love all, trust a few, do wrong to none. - William Shakespeare', 'In three words I can sum up everything Ive learned about life: it goes on. - Robert Frost', 'Zeit heilt alle Wunden. - Geoffrey Chaucer', 'Die Zeit heilt nichts, sie verändert nur. - Friedrich Hebbel ', 'Zeit haben ist besser als Zeit brauchen. - Ernst Ferstl ', 'Die Zeit vergeht, ob du etwas tust oder nicht. - Sam Levenson ', 'Wer Zeit hat, zu klagen, hat auch Zeit, etwas zu tun. - Marie von Ebner-Eschenbach ', 'Nicht die Zeit vergeht, wir vergehen. - Ingeborg Bachmann ', 'Zeit ist ein Geschenk, das wir uns selbst geben. - Peter Bregman ', 'Die Zeit ist ein Mass für die Veränderung. - Aristoteles ', 'Zeit ist das, was wir am meisten verschwenden, weil wir glauben, wir hätten genug davon. - Leo Buscaglia ', 'Die Zeit ist ein guter Arzt, aber ein schlechter Kosmetiker. - Lucille S. Harper ', 'Zeit ist das, was man an der Uhr abliest. - Albert Einstein ', 'Zeit ist das, was uns fehlt, um das zu tun, was wir eigentlich tun möchten. - Paulo Coelho ', 'Man kann die Zeit nicht festhalten, aber man kann sie nutzen. - Tim Ferriss ', 'Zeit ist das, was uns bleibt, wenn alles andere vorbei ist. - Ursula K. Le Guin ', 'Zeit ist eine Illusion. Das Leben ist eine Realität. - Eckhart Tolle ', 'Die Zeit flieht uns wie der Schatten. - Horaz', 'Das Leben ist eine Reise, kein Ziel. - Ralph Waldo Emerson ', 'Lebe das Leben, das du liebst. Liebe das Leben, das du lebst. - Bob Marley ', 'Das Leben besteht nicht aus dem, was passiert, sondern aus dem, was du daraus machst. - Hans Christian Andersen ', 'Das Leben ist zu kurz, um auf jemand anderen zu warten, um dich glücklich zu machen. - Steve Jobs ', 'Geniesse das Leben, es ist von begrenzter Dauer. - Unknown ', 'Lebe jeden Tag, als wäre es dein letzter, denn eines Tages wird es das sein. - Steve Jobs ', 'Das Leben ist wie ein Fahrrad. Um das Gleichgewicht zu halten, musst du in Bewegung bleiben. - Albert Einstein ', 'Du bist der Meister deines Schicksals. Du bist der Kapitän deiner Seele. - William Ernest Henley ', 'Das Leben ist zu kurz, um sich über Dinge aufzuregen, die du nicht ändern kannst. - Unknown ', 'Das Glück deines Lebens hängt von der Beschaffenheit deiner Gedanken ab. - Marcus Aurelius ', 'Das Leben ist zu kostbar, um Zeit zu verschwenden. - Unknown ', 'Lebe heute, vergiss gestern und fürchte nicht morgen. - Unknown ', 'Glücklich zu sein bedeutet, das Leben so zu leben, wie du es leben möchtest. - Unknown ', 'Das Leben ist eine Chance, nutze sie. Das Leben ist Schönheit, bewundere sie. Das Leben ist ein Traum, mache ihn wahr. - Mother Teresa ', 'Nimm das Leben nicht zu ernst, sonst verpasst du den Spass;. - Unknown ', 'Das Leben ist ein Abenteuer, wage es. - Mother Teresa ', 'Lebe im Moment, denn das ist alles, was du hast. - Unknown ', 'Das Leben ist wie ein Buch. Manchmal muss man die Seite umblättern und weiterlesen. - Unknown'];
            //-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
            foreach ($categories as $category) {
                //-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
                $quote = $quotes[array_rand($quotes)];
                $notes = $quotes[array_rand($quotes)];
                $location = $cities[array_rand($cities)];
                //-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
                // Increase the offset by 24 hours for each event.
                $dayOffset = strtotime('+24 hour', $dayOffset);
                // Define the event duration (2 hours as required).
                $dayOffset_to = strtotime('+8 hour', $dayOffset);
                $KalenderDaten[] = [
                    'id' => uniqid(),
                    'title' => __('Example for ', 'termin-kalender') . $category['label'],
                    'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                    'end' => gmdate('Y-m-d\TH:i', $dayOffset_to),
                    'textColor' => $category['textColor'],
                    'backgroundColor' => $category['backgroundColor'],
                    'extendedProps' => [
                        'details' => __('Scheduled for category', 'termin-kalender') . ': <b>' . $category['label'] . '</b> <hr><img src="' . plugin_dir_url(dirname(__FILE__)) . 'assets/termin-kalender-demo.png" width="600" height="339" class="wp-block-image" alt="Termin-Kalender"><hr><blockquote>' . $quote . '</blockquote><hr>',
                        //'details'         =>    __( 'Scheduled for category', 'termin-kalender' )  . ': <b>'.$category['label'],
                        'notes' => 'Demo Data: ' . $notes,
                        'category' => $category,
                        'location' => $location,
                    ],
                ];
            }
            //----------------------------------------------------
// Installations Hilfe
            $dayOffset = strtotime('+48 hour', $dayOffset);
            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Kategorien planen & einrichten',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'Ueberlege, welche Kategorien du fuer deinen Kalender benoenigst. Starte dann das Kategorie-Setup, um einen Vorschlag passender Kategorien zu erhalten. Waehle die gewuenschten aus und ergaenze eigene - so wird dein Termin-Kalender genau das, was du brauchst.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[0],
                ],
            ];

            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Set Up My Categories',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'What does your calendar need to reflect? Think about your monthly routines - work meetings, client appointments, team schedules, room bookings, or car reservations. Then launch the Category Setup Wizard to get smart suggestions tailored to your needs. Select the ones that fit, skip what you don\'t need, and add your own. Your calendar, your structure.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[0],
                ],
            ];
            $dayOffset = strtotime('+24 hour', $dayOffset);

            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Meinen ersten Termin erstellen',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'Erstelle deinen ersten Kalender-Eintrag! Gib ihm einen aussagekraeftigen Titel, schreibe eine kurze Beschreibung - und fuege ein Bild hinzu, damit der Termin auf einen Blick erkennbar ist. So einfach startet dein persoenlicher Termin-Kalender.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[0],
                ],
            ];
            $dayOffset = strtotime('+24 hour', $dayOffset);

            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Add the Termin-Kalender Widget to My Website',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'Place the Termin-Kalender Block anywhere on your website - sidebar, homepage, or landing page. It is a Gutenberg block, so installation is just a few clicks. Your appointments, always visible where it matters.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[0],
                ],
            ];

            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Terminliste auf der Website anzeigen',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'Fuege den Gutenberg Block Termin-Kalender Simple List auf einer beliebigen Seite ein und zeige deinen Besuchern eine uebersichtliche Liste deiner naechsten Termine. Klar, schlank, ohne Overhead. Genau das, was deine Besucher sehen sollen.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[0],
                ],
            ];
            $dayOffset = strtotime('+24 hour', $dayOffset);

            $KalenderDaten[] = [
                'id' => uniqid(),
                'title' => 'Discover Termin-Kalender PRO',
                'start' => gmdate('Y-m-d\TH:i', $dayOffset),
                'allDay' => true,
                'textColor' => '#FFFFFF',
                'backgroundColor' => '#2051CC',
                'extendedProps' => [
                    'details' => 'Ready for more? Visit termin-kalender.pro and explore the full power of Termin-Kalender PRO - advanced features, more resources, extended views, and priority support. Termin-Kalender - more than a calendar.',
                    'notes' => 'Demo Data: ' . $notes,
                    'category' => $categories[5],
                ],
            ];

            // Save the events exactly as a JSON string.
            update_option('termin_kalender_events', json_encode($KalenderDaten), false);
        }
        //------------------------------------------------------------------------------
        // give admins and editors the edit caps so they can always manage the calendar
        $admin = get_role('administrator');
        $admin->add_cap('termin_kalender_edit');
        $admin->add_cap('termin_kalender_delete');
        $editor = get_role('editor');
        $editor->add_cap('termin_kalender_edit');
        $editor->add_cap('termin_kalender_delete');
        //------------------------------------------------------------------------------
        // Update the dashicons list
        //ter_kal_find_dashicons();
        if (empty(get_option('termin_kalender_dashicons'))) {
            // Update the option with a discovered/fallback dashicons list.
            update_option('termin_kalender_dashicons', termin_kalender_get_dashicons_list(), false);
        }

        if (empty(get_option('termin_kalender_todo_list_tasks'))) {
            $tasks[] = [
                'id' => 1,
                'task' => esc_html__('New Task', 'termin-kalender'),
                'priority' => 'new',
                'description' => esc_html__('Example To-Do task entry', 'termin-kalender'),
            ];
            update_option('termin_kalender_todo_list_tasks', json_encode(array_values($tasks)), false);
        }

        // Bei Plugin Update alle Module wieder aktivieren
        delete_option('termin_kalender_disabled_modules');

        //------------------------------------------------------------------------------------------------------------------
        // Setup/Update templates option im globalen Options-Array
        $options = get_option('termin_kalender_options', []);
        $options['termin_kalender_templates'] = [
            'template_standard',
            'template_modern_cards',
            'template_timeline',
            'template_table',
            'template_agenda',
            'template_cover',
            'template_event',
            'template_event_color',
            'template_minimal',
            'template_minimal_with_images'
        ];
        update_option('termin_kalender_options', $options, false);

        // Führe Migration beim Start aus (erstellt DB-Tabelle + migriert Daten, falls Option noch existiert)
        if (class_exists('Termin_Kalender_Event_Repository')) {
            // ----------------------------------------------------
            // Fallback-mode retry: if the site is in options compatibility
            // mode, retry table creation on every activation / plugin update.
            // If the host has since granted CREATE TABLE permission (or the
            // user moved to better hosting), this will succeed and all data
            // is automatically migrated from options → custom table.
            // ----------------------------------------------------
            $tk_options = get_option('termin_kalender_options', []);
            if (!empty($tk_options['db_fallback_mode'])) {
                $table_created = Termin_Kalender_Event_Repository::create_table();
                if ($table_created) {
            Termin_Kalender_Event_Repository::migrate_from_option();
                    // Also trigger todo/teammessage migration if PRO is active.
                    if (class_exists('Termin_Kalender_Todo_Data')) {
                        Termin_Kalender_Todo_Data::get_all(); // triggers migrate_if_needed()
                    }
                    if (class_exists('TK_TeamMessage_Data')) {
                        TK_TeamMessage_Data::get_all(); // triggers migrate_if_needed()
                    }
                }
            } else {
                Termin_Kalender_Event_Repository::migrate_from_option();
            }
        }

    } catch (Exception $e) {
        if (defined('TER_KAL_DEV_MODE_ON')) {
            //echo "<script>console.log( 'Termin Kalender First Run Exception: ' . $e->getMessage() );</script>";
            //error_log( 'Termin Kalender First Run Exception: ' . $e->getMessage() );
        }
    }
} // end first run
//------------------------------------------------------------------------------------------------------------------
