<?php

use WoWPress\Models\Character;
use WoWPress\Models\CharacterList;
use WoWPress\Models\Log;
use WoWPress\Models\Raid;
use WoWPress\Models\SKS;
use WoWPress\Models\SKSHistory;
use WoWPress\Models\User;

add_filter('generate_rewrite_rules', function ($wp_rewrite) {
    $wp_rewrite->rules = array_merge(
        ['roster/?$' => 'index.php?wowpress_page=roster'],
        ['raids/?$' => 'index.php?wowpress_page=raids&year=' . date('Y') . "&month=" . date('m')],
        ['raids/(\d+)/(\d+)?$' => 'index.php?wowpress_page=raids&year=$matches[1]&month=$matches[2]'],
        ['raid/(\d+)/?$' => 'index.php?wowpress_page=raid&raid_id=$matches[1]'],
        ['request/?$' => 'index.php?wowpress_page=form_request'],
        ['sks/?$' => 'index.php?wowpress_page=sks'],
        ['sks/([A-Za-z-0-9 ]+)?$' => 'index.php?wowpress_page=sks&list_name=$matches[1]'],
        ['logs/?$' => 'index.php?wowpress_page=logs'],
        ['db/?$' => 'index.php?wowpress_page=db'],
        ['kummerkasten/?$' => 'index.php?wowpress_page=complaints'],
        ['kummerkasten/(\d+)/?$' => 'index.php?wowpress_page=complaints&complaint_id=$matches[1]'],
        ['lists/?$' => 'index.php?wowpress_page=lists'],
        ['list/(\d+)/?$' => 'index.php?wowpress_page=lists&list_id=$matches[1]'],

        $wp_rewrite->rules
    );
});

add_filter('query_vars', function ($query_vars) {
    $query_vars[] = 'wowpress_page';
    $query_vars[] = 'year';
    $query_vars[] = 'month';
    $query_vars[] = 'raid_id';
    $query_vars[] = 'list_name';
    $query_vars[] = 'list_id';
    $query_vars[] = 'complaint_id';


    return $query_vars;
});

add_action('template_redirect', function () {
    $page = get_query_var('wowpress_page');

    setGlobalUser();


    switch ($page) {
        case 'db':
            isAllowed('wowpress_edit_site');
            wowpress_database();
            header('Location: /');
            die;
            break;
        case 'lists':
            $list = get_query_var('list_id');
            $list = CharacterList::find($list);
            if ($list) {
                $GLOBALS['wowpress']['page_title'] = $list->list_name;
                include plugin_dir_path(__FILE__) . '../pages/single_charlist.php';
            } else {
                $GLOBALS['wowpress']['page_title'] = "Charakterlisten";
                include plugin_dir_path(__FILE__) . '../pages/charlists.php';
            }
            die;
            break;
        case 'complaints':
            isAllowed('wowpress_view_complaints');
            $GLOBALS['wowpress']['page_title'] = "Kummerkasten";
            include plugin_dir_path(__FILE__) . '../pages/complaints.php';
            die;
            break;
        case 'roster':
            $GLOBALS['wowpress']['page_title'] = "Gildenverzeichnis";
            include plugin_dir_path(__FILE__) . '../pages/roster.php';
            die;
            break;
        case 'import_sks':
            isAllowed('wowpress_edit_site');
            echo "<pre>";

            foreach(SKS::getLists() as $list){
                $list_there = SKSHistory::where('list_name',$list->list_name)->first();
                if(empty($list_there)){
                    $export = $list->export();
                    $sks = SKSHistory::createList($list->list_name,$export);
                    $sks->save();
                }
            }
            die;
            break;
        case 'sks':
            isAllowed('wowpress_view_raids');
            $GLOBALS['wowpress']['page_title'] = "SKS-Liste";
            $GLOBALS['wowpress']['liste'] = get_query_var('list_name', null);
            include plugin_dir_path(__FILE__) . '../pages/sks.php';
            die;
            break;
        case 'logs':
            isAllowed('wowpress_edit_raids');
            $GLOBALS['wowpress']['page_title'] = "Logs";
            echo "<div style='display:flex;flex-direction:column;gap:2em;'>";
            echo '<hr style="width:100%">';
            foreach (Log::all() as $log) {
?>
                <div style="display:flex;flex-direction:column;gap:1em;">
                    <div>Message: <?= $log->message ?></div>
                    <div>Action: <?= $log->action ?></div>
                    <div>Logged: <?= format_date($log->created_at, "dd.MM.YY HH:mm") ?></div>
                </div>
                <hr style="width:100%">
<?php
            }
            echo "<div>";
            die;
            break;
        case 'raids':
            # isAllowed('wowpress_view_raids');
            $GLOBALS['wowpress']['page_title'] = "Raids";
            $GLOBALS['wowpress']['raids']['year'] = get_query_var('year')?:date('Y');
            $GLOBALS['wowpress']['raids']['month'] = get_query_var('month')?:date('n');

            include plugin_dir_path(__FILE__) . '../pages/raids.php';
            die;
            break;
        case 'raid':
            isAllowed('wowpress_view_raids');
            $raid = Raid::find(get_query_var('raid_id'));
            $GLOBALS['wowpress']['raid'] = $raid;
            $GLOBALS['wowpress']['page_title'] = $raid->title;

            include plugin_dir_path(__FILE__) . '../pages/single_raid.php';
            die;
            break;
        case 'form_request':
            include plugin_dir_path(__FILE__) . '../request.php';
            die;
        default:
            // DO NOTHING
            break;
    }
});