<?php
/**
 * Plugin Name: Platební formulář
 * Description: Český platební formulář pro prodej online produktů v Elementoru. Prodávejte jednoduše! Po aktivaci pluginu se v Elementoru objeví widget Platební formulář (ikona nákupního vozíku). Vložte formulář na stránku a nastavte název produktu, cenu, akci po nákupu, odesílané e-maily a další. Pro informace o implementaci platebních metod navštivte platebniformular.cz
 * Version: 2.0.6
 * Author: platebniformular.cz
 * Author URI: https://platebniformular.cz
 * Update URI: https://platebniformular.cz/plugin-update.json
 */
// Zabrání přímému přístupu
if (!defined('ABSPATH')) {
    exit;
}
 
// Registrace custom widgetu pro Elementor
function register_custom_widget() {
    require_once plugin_dir_path(__FILE__) . 'widget.php';
    \Elementor\Plugin::instance()->widgets_manager->register_widget_type(new My_Custom_Widget());
}
add_action('elementor/widgets/widgets_registered', 'register_custom_widget');



add_action('elementor/widgets/register', function($widgets_manager) {
    require_once(__DIR__ . '/role-image-widget.php');
    $widgets_manager->register(new \Role_Image_Widget());
});



// ✅ Zablokovat přístup do WP adminu pro všechny kromě administrátora
add_action('admin_init', function () {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();

        // Pokud uživatel není administrátor
        if (!in_array('administrator', (array) $user->roles)) {
            // Pokud se nejedná o AJAX požadavek
            if (!defined('DOING_AJAX') || !DOING_AJAX) {
                wp_redirect(home_url('/vstup')); // Přesměrování na /vstup
                exit;
            }
        }
    }
});

// ✅ Skrytí admin lišty pro všechny kromě administrátora
add_filter('show_admin_bar', function () {
    $user = wp_get_current_user();
    return in_array('administrator', (array) $user->roles);
});



add_action('after_setup_theme', function() {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        $standard_roles = ['administrator', 'editor', 'author', 'contributor', 'subscriber'];
        $has_custom_role = !array_intersect($user->roles, $standard_roles);

        if ($has_custom_role) {
            add_filter('show_admin_bar', '__return_false');
        }
    }
});

// Funkce pro vytvoření stránky "Díky", pokud na URL "/diky" nic není
function create_thank_you_page() {
    // Zkontrolujte, zda již existuje stránka nebo jiný obsah na URL "/diky"
    $page = get_page_by_path('diky');

    if ($page) {
        // Pokud něco na URL "/diky" existuje, nic nevytváříme
        return;
    }

    // Parametry nové stránky
    $page_data = array(
        'post_title'   => 'Díky', // Název stránky
        'post_content' => '',    // Prázdný obsah
        'post_status'  => 'publish',
        'post_type'    => 'page',
        'post_name'    => 'diky', // Nastavení slugu (části URL)
    );

    // Vytvoření stránky
    $page_id = wp_insert_post($page_data);

    // Přidání meta klíče, abychom poznali, že stránku vytvořil plugin
    if ($page_id) {
        add_post_meta($page_id, '_created_by_plugin', true);
    }
}

// Funkce pro přepsání šablony pouze pro stránku vytvořenou pluginem
function override_thank_you_template() {
    // Zkontrolujeme, zda je uživatel na URL "/diky"
    if (is_page('diky')) {
        $page = get_page_by_path('diky');

        // Zkontrolujeme, zda stránku vytvořil plugin (podle meta klíče)
        if ($page && get_post_meta($page->ID, '_created_by_plugin', true)) {
            // Vyčištění jakéhokoli předchozího výstupu
            ob_clean();

            // Výstup moderního designu s checkmarkem
            echo '
            <!DOCTYPE html>
            <html lang="cs">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Díky</title>
                <style>
                    body {
                        margin: 0;
                        padding: 0;
                        height: 100vh;
                        background-color: #f4f7f6;
                        font-family: Arial, sans-serif;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                    }
                    .container {
                        text-align: center;
                        background-color: #e9f7ef;
                        border: 2px solid #28a745;
                        border-radius: 8px;
                        padding: 20px;
                        max-width: 400px;
                        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
                    }
                    .checkmark {
                        font-size: 50px;
                        color: #28a745;
                    }
                    .message {
                        font-size: 24px;
                        color: #28a745;
                        margin: 10px 0;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <div class="checkmark">✔️</div>
                    <p class="message">Platba proběhla v pořádku.</p>
                </div>
            </body>
            </html>';
            exit; // Ukončí vykreslování WordPress šablony
        }
    }
}

// Registrace funkce pro aktivaci pluginu
register_activation_hook(__FILE__, 'create_thank_you_page');

// Přidání akce pro přepsání výstupu stránky "/diky"
add_action('template_redirect', 'override_thank_you_template');




//Odtsranění čárky z názvu role
if (!isset($wp_roles)) {
    $wp_roles = new WP_Roles();
}

// Odstranění čárek z názvů uživatelských rolí
foreach ($wp_roles->roles as $role_key => $role_data) {
    $original_name = $role_data['name'];
    $cleaned_name = str_replace(',', '', $original_name);

    if ($original_name !== $cleaned_name) {
        // Aktualizace role v paměti
        $wp_roles->roles[$role_key]['name'] = $cleaned_name;
        $wp_roles->role_names[$role_key] = $cleaned_name;

        // Uložení změn do databáze
        remove_role($role_key);
        add_role($role_key, $cleaned_name, $role_data['capabilities']);
    }
}




//Vícero rolí pro uživatele
// Skrytí sekce s dropdownem "Úroveň"
add_action('admin_head', 'hide_user_level_section');
function hide_user_level_section() {
    echo '<style>
        .user-role-wrap { display: none !important; }
    </style>';
}

// Přejmenování sloupce "Úroveň" na "Role"
add_filter('manage_users_columns', 'rename_role_column');
function rename_role_column($columns) {
    if (isset($columns['role'])) {
        $columns['role'] = __('Role', 'textdomain');
    }
    return $columns;
}

// Zobrazení checkboxů pro role v kartě uživatele
add_action('show_user_profile', 'add_role_checkboxes');
add_action('edit_user_profile', 'add_role_checkboxes');

function add_role_checkboxes($user) {
    global $wp_roles;

    // Získání všech dostupných rolí
    $all_roles = $wp_roles->roles;
    $user_roles = $user->roles; // Aktuální role uživatele

    echo '<h3>Uživatelské role</h3>';
    echo '<table class="form-table">';
    echo '<tr>';
    echo '<th><label for="user_roles">Role</label></th>';
    echo '<td>';

    // Vygenerujeme checkboxy pro všechny role
    foreach ($all_roles as $role_key => $role) {
        $checked = in_array($role_key, $user_roles) ? 'checked' : '';
        echo '<label>';
        echo '<input type="checkbox" name="user_roles[]" value="' . esc_attr($role_key) . '" ' . $checked . '> ';
        echo esc_html($role['name']);
        echo '</label><br>';
    }

    echo '</td>';
    echo '</tr>';
    echo '</table>';
}

// Uložení uživatelských rolí při úpravě uživatele
add_action('personal_options_update', 'save_user_roles_from_checkboxes');
add_action('edit_user_profile_update', 'save_user_roles_from_checkboxes');

function save_user_roles_from_checkboxes($user_id) {
    global $wpdb;

    // Získáme role z POST požadavku
    if (isset($_POST['user_roles']) && is_array($_POST['user_roles'])) {
        // Připravíme data pro serializovaný zápis do usermeta
        $roles = array_fill_keys($_POST['user_roles'], true);

        // Uložíme do databáze
        $wpdb->update(
            $wpdb->usermeta,
            ['meta_value' => maybe_serialize($roles)],
            ['user_id' => $user_id, 'meta_key' => $wpdb->prefix . 'capabilities'],
            ['%s'],
            ['%d', '%s']
        );

        // Logování
        error_log("Role pro uživatele $user_id byly aktualizovány: " . print_r($roles, true));
    }

    // Zajistíme, že dropdown "role" neovlivní naše nastavení
    if (isset($_POST['role'])) {
        unset($_POST['role']);
        error_log("Dropdown 'role' byl ignorován pro uživatele $user_id.");
    }
}



//Shortcode pro Obrázek s viditelností
add_shortcode('roles_content', function ($atts, $content = null) {
    // Extrahování atributů (např. "roles")
    $atts = shortcode_atts([
        'roles' => '', // Výchozí hodnota je prázdný řetězec
    ], $atts, 'roles_content');

    // Získání aktuálního uživatele
    $current_user = wp_get_current_user();

    // Pokud uživatel není přihlášen, obsah nezobrazíme
    if (empty($current_user->roles)) {
        return '';
    }

    // Seznam povolených rolí z atributu
    $allowed_roles = array_map('trim', explode(',', $atts['roles']));

    // Kontrola, zda má uživatel odpovídající roli
    foreach ($current_user->roles as $role) {
        if (in_array($role, $allowed_roles, true)) {
            // Pokud má uživatel odpovídající roli, zobrazíme obsah
            return do_shortcode($content);
        }
    }

    // Pokud uživatel nemá odpovídající roli, obsah nezobrazíme
    return '';
});





// Funkce pro načítání vlastního stylu přihlašovací stránky
function custom_login_stylesheet() {
    echo '<style>
        /* Základní styl přihlašovací stránky */
        body.login {
            background-color: #FFFFFF;
            font-family: Arial, sans-serif;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        /* Skrytí loga WordPress */
        .login h1 {
            display: none;
        }

        /* Styl formuláře */
        .login form {
            background: #ffffff;
            border: 1px solid #e1e1e1;
            padding: 40px;
            max-width: 400px;
            width: 100%;
            border-radius: 10px;
            box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
        }

        /* Vstupní pole */
        .login form .input, .login form input[type="text"], .login form input[type="password"] {
            font-size: 16px;
            padding: 15px;
            margin-bottom: 20px;
            border-radius: 6px;
            border: 1px solid #cccccc;
            width: 100%;
            box-sizing: border-box;
            background-color: #f7f9fc;
        }

        /* Tlačítko pro přihlášení */
        .login form .button-primary {
            background: #4CAF50;
            border: none;
            padding: 15px;
            font-size: 16px;
            font-weight: bold;
            width: 100%;
            color: #ffffff;
            border-radius: 6px;
            cursor: pointer;
            transition: background 0.3s ease;
        }
        .login form .button-primary:hover {
            background: #45a049;
        }

        /* Styl odkazu „Zapomněli jste heslo?“ */
        .login #nav a {
            color: #4CAF50;
            font-size: 14px;
            display: block;
            text-align: center;
            margin-top: 10px;
        }

        /* Skrytí odkazu na návrat na hlavní stránku */
        .login #backtoblog {
            display: none;
        }

        /* Skrytí jazykového přepínače */
        .language-switcher {
            display: none !important;
        }

        /* Skrytí nápovědy pro heslo */
        .login .password-hint, .login form p.description {
            display: none !important;
        }

        /* Skrytí nápovědy "Níže zadejte své nové heslo..." */
        .login .message {
            display: none !important;
        }
    </style>';

    // JavaScript pro odstranění tlačítka "Generovat heslo"
    echo '<script>
        document.addEventListener("DOMContentLoaded", function() {
            // Skrýt tlačítko "Generovat heslo"
            var generateButton = document.querySelector(".wp-pwd .button.button-secondary");
            if (generateButton) {
                generateButton.style.display = "none";
            }
        });
    </script>';
}
add_action('login_enqueue_scripts', 'custom_login_stylesheet');

// Přesměrování uživatele na stránku z options po uložení nového hesla
function redirect_after_password_reset() {
    $subscribe_url = get_option('subscribe_url', home_url('/vstup'));
    if (isset($_GET['action']) && $_GET['action'] === 'resetpass') {
        echo '<script>
            document.addEventListener("DOMContentLoaded", function() {
                window.location.href = "' . esc_url($subscribe_url) . '";
            });
        </script>';
    }
}
add_action('login_enqueue_scripts', 'redirect_after_password_reset');




function send_activation_request_to_remote_server() {
    $activation_date = date('Y-m-d H:i:s'); // Aktuální datum a čas aktivace
    $remote_url = 'https://platebniformular.cz/plugin_activation.php';
    $site_url = get_site_url(); // Získání URL aktuálního webu

    // Tělo požadavku
    $body = array(
        'activation_date' => $activation_date,
        'site_url' => $site_url,
    );

    // Odeslání POST požadavku na vzdálený server
    $response = wp_remote_post($remote_url, array(
        'method'    => 'POST',
        'body'      => $body,
        'timeout'   => 10,
    ));

}

// Spuštění funkce při aktivaci pluginu
register_activation_hook(__FILE__, 'send_activation_request_to_remote_server');





// REMINDER
function schedule_reminder_cron() {
    if (!wp_next_scheduled('send_reminder')) {
        wp_schedule_event(time(), 'daily', 'send_reminder'); 
    }
}
add_action('wp', 'schedule_reminder_cron');

// Zrušení naplánované události při deaktivaci pluginu
function unschedule_reminder_cron() {
    $timestamp = wp_next_scheduled('send_reminder');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'send_reminder');
    }
}
register_deactivation_hook(__FILE__, 'unschedule_reminder_cron');

// Přidání akce pro cron event 'send_reminder'
add_action('send_reminder', 'call_remind_url');

// Funkce pro zavolání remind.php
function call_remind_url() {
    // Dynamicky vytvoří URL podle aktuální domény
    $remind_url = home_url('/remind.php');
    
    // Použití wp_remote_get pro zavolání URL
    $response = wp_remote_get($remind_url);

    // Kontrola odpovědi pro případ chyby
    if (is_wp_error($response)) {
        error_log("Chyba při volání remind.php: " . $response->get_error_message());
    } else {
        error_log("remind.php úspěšně zavoláno.");
    }
}




// Naplánování denní kontroly poplatků
function schedule_daily_payment_check() {
    if (!wp_next_scheduled('daily_payment_check')) {
        wp_schedule_event(time(), 'daily', 'daily_payment_check'); 
    }
}
add_action('wp', 'schedule_daily_payment_check');

// Zrušení naplánované události při deaktivaci pluginu
function unschedule_daily_payment_check() {
    $timestamp = wp_next_scheduled('daily_payment_check');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'daily_payment_check');
    }
}
register_deactivation_hook(__FILE__, 'unschedule_daily_payment_check');

// Přidání akce pro cron event 'daily_payment_check'
add_action('daily_payment_check', 'process_payments');




// Funkce pro zpracování poplatků a kontrolu nezaplacených poplatků
function process_payments() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';
    error_log("Spouští se kontrola poplatků za předchozí měsíc.");
  

    // SQL dotaz na součet částek za jednotlivé měsíce pouze pro zaplacené platby z produkčního prostředí
    $results = $wpdb->get_results("
        SELECT DATE_FORMAT(date, '%Y-%m') as month, SUM(amount) as total
        FROM $table_name
        WHERE payment_status = 'paid'
        AND api_url NOT LIKE '%demo%'
        GROUP BY DATE_FORMAT(date, '%Y-%m')
        ORDER BY DATE_FORMAT(date, '%Y-%m') ASC
    ");

    // Pro každý měsíc zkontrolujeme, zda byl poplatek zaplacen
    foreach ($results as $row) {
        $month = $row->month;
        $total_paid = $row->total;

        error_log("Kontroluje se měsíc: $month, celková částka: $total_paid Kč");

        // Získání minulého měsíce ve formátu "YYYY-MM"
        $last_month = date('Y-m', strtotime('first day of previous month'));

        // Kontrola, zda se jedná o minulý měsíc
        if ($month !== $last_month) {
            error_log("Tento měsíc není minulý měsíc ($last_month), přeskočeno.");
            continue;
        }

        error_log("Jedná se o minulý měsíc: $last_month.");

        // Klíč pro ukládání poplatku za měsíc
        $paid_key = 'paid_' . str_replace('-', '_', $month);
        update_option($paid_key, $total_paid);

        error_log("Uložena celková částka $total_paid Kč pro měsíc $month.");

        // Získání stavu poplatku (jestli byl zaplacen)
        $poplatek_zaplacen_key = 'poplatek_zaplacen_' . str_replace('-', '_', $month);
        $poplatek_zaplacen = get_option($poplatek_zaplacen_key, 'ne');

        error_log("Stav poplatku pro měsíc $month: " . ($poplatek_zaplacen === 'ano' ? 'Zaplacen' : 'Nezaplacen'));

        // Získání parent_payment_uid z options
        $parent_payment_uid = get_option('parent_payment_uid', '');

        error_log("Hodnota parent_payment_uid: " . (!empty($parent_payment_uid) ? $parent_payment_uid : 'Neexistuje'));

        // Pokud poplatek není zaplacen, částka je větší než 100, a existuje parent_payment_uid, spustíme pay_token.php
        if ($poplatek_zaplacen === 'ne' && $total_paid > 100 && !empty($parent_payment_uid)) {
            error_log("Poplatek za $month není zaplacen, částka je $total_paid Kč a parent_payment_uid existuje. Spuštěn pay_token.php.");

            // Spustí skript pay_token.php
            require_once(dirname(__FILE__) . '/pay_token.php');
        } elseif (empty($parent_payment_uid)) {
            error_log("Poplatek za $month není zaplacen, ale parent_payment_uid neexistuje, takže platba nemůže být spuštěna.");
        }
    }

    error_log("Kontrola poplatků dokončena.");
}




//CRON FIO API
function schedule_call_api_cron() {
    if (!wp_next_scheduled('call_api_event')) {
        wp_schedule_event(time(), 'daily', 'call_api_event'); 
    }
}
add_action('wp', 'schedule_call_api_cron');

// Zrušení naplánované události při deaktivaci pluginu
function unschedule_call_api_cron() {
    $timestamp = wp_next_scheduled('call_api_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'call_api_event');
    }
}
register_deactivation_hook(__FILE__, 'unschedule_call_api_cron');

// Přidání akce pro cron event 'call_api_event'
add_action('call_api_event', 'call_api_url');

// Funkce pro zavolání call_api.php
function call_api_url() {
    // Dynamicky vytvoří URL podle aktuální domény
    $call_api_url = home_url('/call_api.php');
    
    // Použití wp_remote_get pro zavolání URL
    $response = wp_remote_get($call_api_url);

    // Kontrola odpovědi pro případ chyby
    if (is_wp_error($response)) {
        error_log("Chyba při volání call_api.php: " . $response->get_error_message());
    } else {
        error_log("Spouštím cron Fio API. call_api.php úspěšně zavoláno.");
    }
}
//Volání Fio api při návštěvě wp-admin
//add_action('admin_init', 'call_api_url');
add_action('current_screen', function($screen) { if ($screen->id === 'toplevel_page_zakaznici') call_api_url(); });


//AKTUALIZACE
add_action('load-plugins.php', 'check_on_plugins_page');

function check_on_plugins_page() {
    error_log('Spouštím kontrolu verze Platebního formuláře.');

    // Správná cesta k hlavnímu souboru pluginu
    $plugin_slug = 'platebni-formular/plugin.php';
    $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_slug;

    // Načtení dat pluginu
    if (!file_exists($plugin_path)) {
        error_log('Soubor plugin.php nebyl nalezen na cestě: ' . $plugin_path);
        return;
    }

    // Použití get_plugin_data pro načtení dat pluginu
    require_once ABSPATH . 'wp-admin/includes/plugin.php'; // Zajistí, že funkce je dostupná
    $plugin_data = get_plugin_data($plugin_path);
    if (empty($plugin_data['Version'])) {
        error_log('Nelze načíst verzi pluginu.');
        return;
    }

    $current_version = $plugin_data['Version'];
    error_log('Kontrola aktualizací pro plugin: ' . $plugin_data['Name'] . ' (verze: ' . $current_version . ')');

    // Načtení JSON souboru z vašeho serveru
    $response = wp_remote_get('https://platebniformular.cz/plugin-update.json');
    if (is_wp_error($response)) {
        error_log('Chyba při načítání JSON: ' . $response->get_error_message());
        return;
    }

    $status_code = wp_remote_retrieve_response_code($response);
    $response_body = wp_remote_retrieve_body($response);

    if ($status_code !== 200) {
        error_log('Chybný HTTP status code: ' . $status_code);
        return;
    }

    $data = json_decode($response_body, true);
    if (json_last_error() !== JSON_ERROR_NONE || !$data) {
        error_log('Chyba: JSON není validní. Odpověď: ' . $response_body);
        return;
    }

    error_log('Dostupná verze na serveru: ' . $data['version']);

    // Porovnání verzí
    if (version_compare($current_version, $data['version'], '<')) {
        error_log('Nová verze dostupná: ' . $data['version']);

        // Aktualizace transientu update_plugins
        $transient = get_site_transient('update_plugins');
        if (!$transient) {
            $transient = new stdClass();
        }

        if (!isset($transient->response)) {
            $transient->response = [];
        }

        $transient->response[$plugin_slug] = (object) [
            'slug'        => 'platebni-formular',         // Slug pluginu
            'plugin'      => $plugin_slug,               // Cesta k hlavnímu souboru pluginu
            'new_version' => $data['version'],           // Nová verze
            'package'     => $data['download_url'],      // URL ke stažení nové verze
            'tested'      => $data['tested'],            // Verze WP, se kterou byl testován
            'requires'    => $data['requires'],          // Minimální verze WP
        ];

        set_site_transient('update_plugins', $transient);
        error_log('Transient update_plugins byl aktualizován.');
    } else {
        error_log('Aktuální verze pluginu je již nejnovější.');
    }
}

// Filtr pro zobrazení informací o pluginu ve WordPressu
add_filter('plugins_api', function ($false, $action, $args) {
    // Zkontrolujeme, zda žádost odpovídá našemu pluginu
    if ($action !== 'plugin_information' || $args->slug !== 'platebni-formular') {
        return $false;
    }

    // Načteme JSON soubor z vašeho serveru
    $response = wp_remote_get('https://platebniformular.cz/plugin-update.json');
    if (is_wp_error($response)) {
        error_log('Chyba při načítání detailů pluginu: ' . $response->get_error_message());
        return $false;
    }

    // Dekódujeme JSON odpověď
    $data = json_decode(wp_remote_retrieve_body($response), true);
    if (!$data) {
        error_log('Chyba: JSON odpověď není validní.');
        return $false;
    }

    // Vrátíme informace o pluginu
    return (object) [
        'name'          => $data['name'],
        'slug'          => $data['slug'],
        'version'       => $data['version'],
        'author'        => $data['author'],
        'author_profile'=> isset($data['author_profile']) ? $data['author_profile'] : '',
        'homepage'      => $data['homepage'],
        'requires'      => $data['requires'],
        'tested'        => $data['tested'],
        'requires_php'  => $data['requires_php'],
        'download_link' => $data['download_url'],
        'sections'      => (array) $data['sections'],
    ];
}, 10, 3);


// Vytvoření tabulky zákazníků při aktivaci pluginu
function create_customers_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';
    $charset_collate = $wpdb->get_charset_collate();
 
   $sql = "CREATE TABLE IF NOT EXISTS $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    first_name varchar(100) NOT NULL,
    surname varchar(100) NOT NULL,
    email varchar(100),
    phone varchar(15),
    address text,
    amount decimal(10,2) NOT NULL,
    discount_code varchar(50),
    product_name varchar(255),
    uid varchar(255) NOT NULL,
    date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
    email_subject text NOT NULL,  
    email_body text NOT NULL,
    reminder_subject text NOT NULL,  
    reminder_body text NOT NULL,
    api_url varchar(255),
    gate_url varchar(255), 
    email_from varchar(255),
    navratova_url varchar(255),  
    merchant_id varchar(255),
    project_id int(11),       
    api_password varchar(255),
    payment_status varchar(50),
    payment_method varchar(255), 
    pay_url varchar(255),
    invoice_number VARCHAR(255),
    reminder_sent TINYINT(1) DEFAULT 0,
    PRIMARY KEY (id)
) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'create_customers_table');
 



function add_vytvorit_profil_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'vytvorit_profil'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `vytvorit_profil` TINYINT(1) NOT NULL DEFAULT 0");
    }
}
add_action('plugins_loaded', 'add_vytvorit_profil_column');



function add_login_url_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'login_url'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `login_url` varchar(255)");
    }
}
add_action('plugins_loaded', 'add_login_url_column');


function add_email_from_name_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'email_from_name'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `email_from_name` varchar(255)");
    }
}
add_action('plugins_loaded', 'add_email_from_name_column');



function add_ico_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'ico'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `ico` varchar(50)");
    }
}
add_action('plugins_loaded', 'add_ico_column');

function add_dic_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'dic'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `dic` varchar(50)");
    }
}
add_action('plugins_loaded', 'add_dic_column');

function add_company_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'company'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `company` varchar(255)");
    }
}
add_action('plugins_loaded', 'add_company_column');



function add_vs_column() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    $column_exists = $wpdb->get_results("SHOW COLUMNS FROM `$table_name` LIKE 'vs'");
    if (empty($column_exists)) {
        $wpdb->query("ALTER TABLE `$table_name` ADD `vs` varchar(255)");
    }
}
add_action('plugins_loaded', 'add_vs_column');



// Vytvoření tabulky logu e-mailů
function create_email_log_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici_email_log';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        email_subject text NOT NULL,
        email_body text NOT NULL,
        email_address varchar(255) NOT NULL,
        sent_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'create_email_log_table');



//ZAPLATIT - Funkce pro kopírování souboru při aktivaci pluginu
function custom_plugin_activation() {
    // Cesta k souboru zaplatit.php v adresáři pluginu
    $plugin_dir = plugin_dir_path(__FILE__);
    $source_file = $plugin_dir . 'zaplatit.php'; 
    $destination_file = ABSPATH . 'zaplatit.php'; 

    // Zkontrolujeme, zda soubor zaplatit.php existuje, než ho zkopírujeme
    if (file_exists($source_file)) {
        // Kopírování souboru do kořenového adresáře
        if (!copy($source_file, $destination_file)) {
            // Pokud se kopírování nezdaří, můžeme vypsat chybu (nebo si to uložit do logu)
            error_log('Chyba při kopírování souboru zaplatit.php.');
        } else {
            // Pokud je kopírování úspěšné
            error_log('Soubor zaplatit.php byl úspěšně zkopírován do kořenového adresáře.');
        }
    } else {
        // Pokud soubor neexistuje v pluginu
        error_log('Soubor zaplatit.php nebyl nalezen v adresáři pluginu.');
    }
}

// Připojení funkce k akci aktivace pluginu
register_activation_hook(__FILE__, 'custom_plugin_activation');

 



//CALL_API - Funkce pro kopírování souboru při aktivaci pluginu
function call_api_activation() {
    // Cesta k souboru call_api.php v adresáři pluginu
    $plugin_dir = plugin_dir_path(__FILE__);
    $source_file = $plugin_dir . 'call_api.php'; 
    $destination_file = ABSPATH . 'call_api.php'; 

    // Zkontrolujeme, zda soubor call_api.php existuje, než ho zkopírujeme
    if (file_exists($source_file)) {
        // Kopírování souboru do kořenového adresáře
        if (!copy($source_file, $destination_file)) {
            // Pokud se kopírování nezdaří, můžeme vypsat chybu (nebo si to uložit do logu)
            error_log('Chyba při kopírování souboru call_api.php.');
        } else {
            // Pokud je kopírování úspěšné
            error_log('Soubor call_api.php byl úspěšně zkopírován do kořenového adresáře.');
        }
    } else {
        // Pokud soubor neexistuje v pluginu
        error_log('Soubor call_api.php nebyl nalezen v adresáři pluginu.');
    }
}

// Připojení funkce k akci aktivace pluginu
register_activation_hook(__FILE__, 'call_api_activation');




// Vytvoření souboru call.php při aktivaci pluginu
function create_call_file() {
    $file_path = ABSPATH . 'call.php'; // Cesta k souboru call.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/return.php";

// Zkontrolovat, zda existuje soubor return.php
if (file_exists($plugin_path)) {
    // Spustit return.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript return.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru call.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_file');



// Vytvoření souboru remind.php při aktivaci pluginu
function create_remind_file() {
    $file_path = ABSPATH . 'remind.php'; // Cesta k souboru remind.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {

// Obsah souboru remind.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/reminder.php";

// Zkontrolovat, zda existuje soubor reminder.php
if (file_exists($plugin_path)) {
    // Spustit reminder.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript reminder.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru remind.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_remind_file');




// Vytvoření souboru call_child.php při aktivaci pluginu
function create_call_child_file() {
    $file_path = ABSPATH . 'call_child.php'; // Cesta k souboru call_child.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call_child.php
        $file_content = '<?php
error_log("Zavoláno call_child, což by se nemělo stát.");
?>';

        // Vytvoření souboru call_child.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_child_file');



// Vytvoření souboru call_parent.php při aktivaci pluginu
function create_call_parent_file() {
    $file_path = ABSPATH . 'call_parent.php'; // Cesta k souboru call_parent.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call_parent.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/payment_parent.php";

// Zkontrolovat, zda existuje soubor payment_parent.php
if (file_exists($plugin_path)) {
    // Spustit payment_parent.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript payment_parent.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru call_parent.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_parent_file');




// Vytvoření souboru call_pay_token.php při aktivaci pluginu
function create_call_pay_token_file() {
    $file_path = ABSPATH . 'call_pay_token.php'; // Cesta k souboru call_pay_token.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call_pay_token.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/pay_token.php";

// Zkontrolovat, zda existuje soubor pay_token.php
if (file_exists($plugin_path)) {
    // Spustit pay_token.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript pay_token.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru call_pay_token.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_pay_token_file');




// Vytvoření souboru call_subscribe.php při aktivaci pluginu
function create_call_subscribe_file() {
    $file_path = ABSPATH . 'call_subscribe.php'; // Cesta k souboru call_subscribe.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call_subscribe.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/subscribe.php";

// Zkontrolovat, zda existuje soubor subscribe.php
if (file_exists($plugin_path)) {
    // Spustit subscribe.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript subscribe.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru call_subscribe.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_subscribe_file');




// Vytvoření souboru call_token.php při aktivaci pluginu
function create_call_token_file() {
    $file_path = ABSPATH . 'call_token.php'; // Cesta k souboru call_token.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru call_token.php
        $file_content = '<?php
// Cesta k pluginu
$plugin_path = dirname(__FILE__) . "/wp-content/plugins/platebni-formular/token.php";

// Zkontrolovat, zda existuje soubor token.php
if (file_exists($plugin_path)) {
    // Spustit token.php
    require_once $plugin_path;
} else {
    // Zobrazit chybu, pokud soubor neexistuje
    echo "Skript token.php nebyl nalezen.";
}
?>';

        // Vytvoření souboru call_token.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_call_token_file');





// Vytvoření souboru export.php při aktivaci pluginu
function create_export_file() {
    $file_path = ABSPATH . 'export.php'; // Cesta k souboru export.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru export.php
        $file_content = '<?php
// Načtení WordPress prostředí
require_once dirname(__FILE__) . "/wp-load.php";

// Zajištění, že přístup mají pouze administrátoři
if (!is_user_logged_in() || !current_user_can("administrator")) {
    wp_redirect(wp_login_url());
    exit;
}

// Nastavení názvu tabulky
global $wpdb;
$table_name = $wpdb->prefix . "zakaznici";

// Dotaz pro výběr požadovaných sloupců
$query = "SELECT first_name, surname, email, phone, address, amount, product_name, date, payment_status, payment_method FROM $table_name";
$customers = $wpdb->get_results($query, ARRAY_A);

// Nastavení hlaviček pro stahování CSV souboru
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=zakaznici_export.csv");

// Otevření výstupu pro záznam dat
$output = fopen("php://output", "w");

// Přidání UTF-8 BOM
fwrite($output, "\xEF\xBB\xBF");

// Zápis názvů sloupců
fputcsv($output, ["First Name", "Surname", "Email", "Phone", "Address", "Amount", "Product Name", "Date", "Payment Status", "Payment Method"]);

// Zápis každého řádku z výsledků dotazu do CSV
foreach ($customers as $row) {
    fputcsv($output, $row);
}

// Zavření výstupu
fclose($output);
exit();
?>';

        // Vytvoření souboru export.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_export_file');




// Vytvoření souboru invoices_me.php při aktivaci pluginu
function create_invoices_me_file() {
    $file_path = ABSPATH . 'invoices_me.php'; // Cesta k souboru invoices_me.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru invoices_me.php
        $file_content = '<?php
// Načtení WordPress prostředí
require_once(dirname(__FILE__) . "/wp-load.php");


// Zajištění, že přístup mají pouze administrátoři
if (!is_user_logged_in() || !current_user_can("administrator")) {
    wp_redirect(wp_login_url());
    exit;
}


// Zakázání cache
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Cesta k adresáři s fakturami
$dir = __DIR__ . "/invoices_me";

// Funkce pro vytvoření a okamžité stažení ZIP souboru
function download_zip($files = array(), $zip_filename = "faktury.zip") {
    if (!class_exists("ZipArchive")) {
        exit("ZipArchive není dostupný na tomto serveru.");
    }

    // Vytvoříme nový ZIP objekt
    $zip = new ZipArchive();
    $zip_content = tempnam(sys_get_temp_dir(), "zip"); // Vytvoří dočasný soubor pro ZIP
    $zip->open($zip_content, ZipArchive::CREATE | ZipArchive::OVERWRITE);

    // Přidáme všechny soubory do ZIP
    foreach ($files as $file) {
        if (file_exists($file)) {
            $zip->addFile($file, basename($file)); // Přidáme soubor do ZIP, název souboru je basename
        }
    }

    // Uzavřeme ZIP
    $zip->close();

    // Hlavičky pro stažení souboru
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=" . $zip_filename);
    header("Content-Length: " . filesize($zip_content));

    // Přečteme obsah souboru a pošleme ho uživateli
    readfile($zip_content);

    // Smažeme dočasný soubor
    unlink($zip_content);

    exit; // Ukončíme skript, aby se nevracely další výstupy
}

// Pokud uživatel klikne na odkaz pro stažení ZIP archivu
if (isset($_GET["download_all"])) {
    // Získáme seznam souborů ve složce
    $files = array();
    if (is_dir($dir)) {
        if ($handle = opendir($dir)) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    $files[] = $dir . "/" . $file;
                }
            }
            closedir($handle);
        }
    }

    // Pokud máme soubory, stáhneme je v ZIP formátu
    if (!empty($files)) {
        download_zip($files); // Vytvoříme ZIP a stáhneme jej
    } else {
        echo "<p>Ještě nemáte žádné faktury.</p>";
    }
}

// Styl pro lepší zobrazení seznamu
echo "
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f9f9f9;
            padding: 20px;
        }
        h1 {
            color: #333;
            text-align: center;
            font-size: 24px;
            margin-bottom: 20px;
        }
        .invoice-list {
            list-style: none;
            padding: 0;
            max-width: 600px;
            margin: 0 auto;
        }
        .invoice-list li {
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 5px;
            margin-bottom: 10px;
            padding: 15px;
            transition: background-color 0.3s;
        }
        .invoice-list li:hover {
            background-color: #f1f1f1;
        }
        .invoice-list li a {
            text-decoration: none;
            color: #0073aa;
            font-size: 16px;
            font-weight: bold;
        }
        .invoice-list li a:hover {
            color: #005177;
        }
        .download-all {
            display: block;
            text-align: center;
            margin: 10px auto 20px auto;
            padding: 10px 20px;
            background-color: #0073aa;
            color: #fff;
            border-radius: 5px;
            text-decoration: none;
            width: fit-content;
        }
        .download-all:hover {
            background-color: #005177;
        }
        .no-invoices-message {
            font-size: 18px;
            color: #666;
            text-align: center;
            margin-top: 50px;
            padding: 20px;
            background-color: #f1f1f1;
            border-radius: 10px;
            max-width: 500px;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
";

// Zkontroluje, zda adresář existuje a obsahuje soubory
$has_invoices = false;
if (is_dir($dir)) {
    if ($handle = opendir($dir)) {
        // Zjistí, zda adresář obsahuje faktury
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $has_invoices = true;
                break; // Jakmile najdeme první soubor, přestaneme procházet
            }
        }
        closedir($handle);
    }
}

// Přidáme náhodný parametr k URL, aby se vynutilo aktuální načtení stránky
$random_param = time();

// Zobrazíme faktury nebo zprávu "Ještě nemáte žádné faktury"
echo "<h1>Faktury, které jste vystavili svým zákazníkům</h1>";

if ($has_invoices) {
    // Přidáme odkaz pro stažení všech faktur v ZIP archivu hned pod nadpis
    echo "<a href=\"?download_all=true&rand=" . $random_param . "\" class=\"download-all\">Stáhnout všechny faktury</a>";

    // Otevře adresář znovu pro zobrazení faktur
    if ($handle = opendir($dir)) {
        echo "<ul class=\"invoice-list\">";
        // Iteruje přes všechny soubory v adresáři
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                // Přidáme náhodný parametr pro vynucení aktuální verze
                echo "<li><a href=\"" . site_url("/invoices_me/" . $file) . "?rand=" . $random_param . "\" target=\"_blank\">" . $file . "</a></li>";
            }
        }
        echo "</ul>";
        closedir($handle);
    }
} else {
    echo "<div class=\"no-invoices-message\">Ještě nemáte žádné faktury.</div>";
}
?>';

        // Vytvoření souboru invoices_me.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_invoices_me_file');



// Vytvoření souboru invoices_received.php při aktivaci pluginu
function create_invoices_received_file() {
    $file_path = ABSPATH . 'invoices_received.php'; // Cesta k souboru invoices_received.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {
        // Obsah souboru invoices_received.php
        $file_content = '<?php
// Načtení WordPress prostředí
require_once(dirname(__FILE__) . "/wp-load.php");


// Zajištění, že přístup mají pouze administrátoři
if (!is_user_logged_in() || !current_user_can("administrator")) {
    wp_redirect(wp_login_url());
    exit;
}

// Zakázání cache
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Cesta k adresáři s fakturami
$dir = __DIR__ . "/invoices_received";

// Funkce pro vytvoření a okamžité stažení ZIP souboru
function download_zip($files = array(), $zip_filename = "faktury.zip") {
    if (!class_exists("ZipArchive")) {
        exit("ZipArchive není dostupný na tomto serveru.");
    }

    // Vytvoříme nový ZIP objekt
    $zip = new ZipArchive();
    $zip_content = tempnam(sys_get_temp_dir(), "zip"); // Vytvoří dočasný soubor pro ZIP
    $zip->open($zip_content, ZipArchive::CREATE | ZipArchive::OVERWRITE);

    // Přidáme všechny soubory do ZIP
    foreach ($files as $file) {
        if (file_exists($file)) {
            $zip->addFile($file, basename($file)); // Přidáme soubor do ZIP, název souboru je basename
        }
    }

    // Uzavřeme ZIP
    $zip->close();

    // Hlavičky pro stažení souboru
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=\"" . $zip_filename . "\"");
    header("Content-Length: " . filesize($zip_content));

    // Přečteme obsah souboru a pošleme ho uživateli
    readfile($zip_content);

    // Smažeme dočasný soubor
    unlink($zip_content);

    exit; // Ukončíme skript, aby se nevracely další výstupy
}

// Pokud uživatel klikne na odkaz pro stažení ZIP archivu
if (isset($_GET["download_all"])) {
    // Získáme seznam souborů ve složce
    $files = array();
    if (is_dir($dir)) {
        if ($handle = opendir($dir)) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    $files[] = $dir . "/" . $file;
                }
            }
            closedir($handle);
        }
    }

    // Pokud máme soubory, stáhneme je v ZIP formátu
    if (!empty($files)) {
        download_zip($files); // Vytvoříme ZIP a stáhneme jej
    } else {
        echo "<p>Ještě nemáte žádné faktury.</p>";
    }
}

// Styl pro lepší zobrazení seznamu
echo "
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f9f9f9;
            padding: 20px;
        }
        h1 {
            color: #333;
            text-align: center;
            font-size: 24px;
            margin-bottom: 20px;
        }
        .invoice-list {
            list-style: none;
            padding: 0;
            max-width: 600px;
            margin: 0 auto;
        }
        .invoice-list li {
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 5px;
            margin-bottom: 10px;
            padding: 15px;
            transition: background-color 0.3s;
        }
        .invoice-list li:hover {
            background-color: #f1f1f1;
        }
        .invoice-list li a {
            text-decoration: none;
            color: #0073aa;
            font-size: 16px;
            font-weight: bold;
        }
        .invoice-list li a:hover {
            color: #005177;
        }
        .download-all {
            display: block;
            text-align: center;
            margin: 10px auto 20px auto;
            padding: 10px 20px;
            background-color: #0073aa;
            color: #fff;
            border-radius: 5px;
            text-decoration: none;
            width: fit-content;
        }
        .download-all:hover {
            background-color: #005177;
        }
        .no-invoices-message {
            font-size: 18px;
            color: #666;
            text-align: center;
            margin-top: 50px;
            padding: 20px;
            background-color: #f1f1f1;
            border-radius: 10px;
            max-width: 500px;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
";

// Zkontroluje, zda adresář existuje a obsahuje soubory
$has_invoices = false;
if (is_dir($dir)) {
    if ($handle = opendir($dir)) {
        // Zjistí, zda adresář obsahuje faktury
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $has_invoices = true;
                break; // Jakmile najdeme první soubor, přestaneme procházet
            }
        }
        closedir($handle);
    }
}

// Přidáme náhodný parametr k URL, aby se vynutilo aktuální načtení stránky
$random_param = time();

// Zobrazíme faktury nebo zprávu "Ještě nemáte žádné faktury"
echo "<h1>Faktury za používání platebního formuláře</h1>";

if ($has_invoices) {
    // Přidáme odkaz pro stažení všech faktur v ZIP archivu hned pod nadpis
    echo "<a href=\"?download_all=true&rand=" . $random_param . "\" class=\"download-all\">Stáhnout všechny faktury</a>";

    // Otevře adresář znovu pro zobrazení faktur
    if ($handle = opendir($dir)) {
        echo "<ul class=\"invoice-list\">";
        // Iteruje přes všechny soubory v adresáři
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                // Přidáme náhodný parametr pro vynucení aktuální verze
                echo "<li><a href=\"" . site_url("/invoices_received/" . $file) . "?rand=" . $random_param . "\" target=\"_blank\">" . $file . "</a></li>";
            }
        }
        echo "</ul>";
        closedir($handle);
    }
} else {
    echo "<div class=\"no-invoices-message\">Ještě nemáte žádné faktury.</div>";
}
?>';

        // Vytvoření souboru invoices_received.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_invoices_received_file');



// Vytvoření souboru upload.php při aktivaci pluginu
function create_upload_file() {
    $file_path = ABSPATH . 'upload.php'; // Cesta k souboru upload.php v rootu

    // Zkontrolovat, zda soubor neexistuje, aby nebyl přepsán
    if (!file_exists($file_path)) {

        // Obsah souboru upload.php
        $file_content = '<?php
// Nastavení cesty k adresáři invoices_received v rootu
$target_dir = __DIR__ . "/invoices_received/";

// Zkontrolovat, zda složka existuje, pokud ne, vytvořit ji
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0755, true);  // Vytvoří složku s oprávněním 0755, pokud neexistuje
}

// Cesta k nahranému souboru
$target_file = $target_dir . basename($_FILES["file"]["name"]);

// Kontrola, zda soubor skutečně byl nahrán
if (isset($_FILES["file"]) && is_uploaded_file($_FILES["file"]["tmp_name"])) {
    // Přesun souboru do cílové složky
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo "Faktura byla úspěšně nahrána.";
    } else {
        echo "Chyba při nahrávání faktury.";
    }
} else {
    echo "Žádný soubor nebyl nahrán.";
}
?>';

        // Vytvoření souboru upload.php
        file_put_contents($file_path, $file_content);

        // Nastavení oprávnění pro soubor
        chmod($file_path, 0644); // Oprávnění pro čtení a zápis pro vlastníka, čtení pro ostatní
    }
}
register_activation_hook(__FILE__, 'create_upload_file');






// Přidání nové administrativní stránky "Platební formulář"
function zakaznici_menu() {
    add_menu_page(
        'Platební formulář',
        'Platební formulář',
        'manage_options',
        'zakaznici',
        'show_customers_data',
        'dashicons-cart', // Použití Dashicons - vozík
        6
    );
}
add_action('admin_menu', 'zakaznici_menu');


// Přidání Media Uploaderu pro nahrávání loga a podpisu
function enqueue_media_uploader() {
    wp_enqueue_media();  // Načtení Media Library
}
add_action('admin_enqueue_scripts', 'enqueue_media_uploader');

// Zobrazení dat zákazníků, grafu a logu e-mailů
function show_customers_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';


// Kontrola, zda byl widget použit
$is_widget_used = get_option('custom_widget_used');

if (!$is_widget_used) {
    // Zobrazení zprávy a obrázku, pokud widget není vložen
    echo '<div style="text-align: center; margin-top: 50px;">';
    echo '<h2 style="font-size: 24px; color: #333;">Vložení formuláře na stránku v Elementoru</h2>';

    // Natvrdo zadaná URL obrázku
    echo '<img src="https://platebniformular.cz/wp-content/uploads/2024/11/apply.jpg" alt="Vložení na web" style="margin-top: 5px;">';

    echo '</div>'; // Uzavření zarovnání na střed
}




    // Kontrola, zda byla poslední platba neúspěšná
    $payment_failed = get_option('payment_failed', 'ne');

    // Pokud platba selhala, zobrazíme červené tlačítko pouze v administraci
    if (is_admin() && $payment_failed === 'ano') {
        echo '<div style="margin-bottom: 20px; text-align: center;">
                <a href="' . esc_url(home_url('/call_token.php')) . '" style="display: inline-block; background-color: red; color: white; padding: 20px 40px; text-decoration: none; font-size: 16px; font-weight: bold;">
                    Nezdařila se platba poplatku za platební formulář. Zkontrolujte zůstatek na svém účtu, nebo aktualizujte platební údaje kliknutím na toto tlačítko.
                </a>
              </div>';
    }

    // Kontrola počtu zaplacených objednávek a existence parent_payment_uid
    $paid_orders_count = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}zakaznici WHERE payment_status = 'paid' AND api_url NOT LIKE '%demo%'");
    $parent_payment_uid = get_option('parent_payment_uid', '');
    $parent_payment_completed = get_option('parent_payment_completed', 'ne');

    // První tlačítko, když je víc než 5 zákazníků
    if (is_admin() && $paid_orders_count >= 5 && empty($parent_payment_uid) && ($parent_payment_completed === 'yes' || $parent_payment_completed === 'ne')) {
        echo '<div style="margin-bottom: 20px; text-align: center;">
                <a href="' . esc_url(home_url('/call_token.php')) . '" style="display: inline-block; background-color: red; color: white; padding: 20px 40px; text-decoration: none; font-size: 16px; font-weight: bold;">
                    Zadejte své platební údaje pro poplatek za platební formulář
                </a>
              </div>';
    }

    // Zakázání administrativních notifikací
    remove_all_actions('admin_notices');


// SQL dotaz na aktuální rok
$current_year = date('Y');
$current_month = date('m'); // Aktuální měsíc
$months = ['Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'];
$current_month_name = $months[(int)$current_month - 1];
$current_month_total = $wpdb->get_var("
    SELECT SUM(amount)
    FROM $table_name
    WHERE payment_status = 'paid'
    AND api_url NOT LIKE '%demo%'
    AND YEAR(date) = $current_year
    AND MONTH(date) = $current_month
");

// SQL dotaz na data pro celý aktuální rok
$current_year_results = $wpdb->get_results("
    SELECT DATE_FORMAT(date, '%m') as month, SUM(amount) as total
    FROM $table_name
    WHERE payment_status = 'paid'
    AND api_url NOT LIKE '%demo%'
    AND YEAR(date) = $current_year
    GROUP BY DATE_FORMAT(date, '%m')
    ORDER BY DATE_FORMAT(date, '%m') ASC
");

// SQL dotaz na historická data
$historical_results = $wpdb->get_results("
    SELECT YEAR(date) as year, DATE_FORMAT(date, '%m') as month, SUM(amount) as total
    FROM $table_name
    WHERE payment_status = 'paid'
    AND api_url NOT LIKE '%demo%'
    AND YEAR(date) < $current_year
    GROUP BY YEAR(date), DATE_FORMAT(date, '%m')
    ORDER BY YEAR(date), DATE_FORMAT(date, '%m') ASC
");

// Inicializace dat
$current_year_totals = array_fill(0, 12, 0);
$historical_totals = array_fill(0, 12, []);

// Zpracování aktuálních dat
foreach ($current_year_results as $row) {
    $month_index = (int)$row->month - 1;
    $current_year_totals[$month_index] = round($row->total); // Zaokrouhlení na celé Kč
}

// Zpracování historických dat
foreach ($historical_results as $row) {
    $year = $row->year;
    $month_index = (int)$row->month - 1;

    if (!isset($historical_totals[$month_index][$year])) {
        $historical_totals[$month_index][$year] = 0;
    }

    $historical_totals[$month_index][$year] += round($row->total); // Zaokrouhlení na celé Kč
}

// Najít nejvyšší hodnoty pro každý měsíc
$max_historical_totals = array_map(function ($month_data) {
    return !empty($month_data) ? max($month_data) : 0;
}, $historical_totals);

// Vytvoření datasetů pro Chart.js
$datasets = [
    [
        'label' => "Uhrazeno $current_year",
        'data' => $current_year_totals,
        'backgroundColor' => "rgba(75, 192, 192, 1)",
        'borderColor' => "rgba(75, 192, 192, 1)",
        'borderWidth' => 1
    ],
    [
        'label' => "Historie",
        'data' => $max_historical_totals, // Nejvyšší výdělky pro každý měsíc
        'backgroundColor' => "rgba(75, 192, 192, 0.4)", 
        'borderColor' => "rgba(75, 192, 192, 0.4)",
        'borderWidth' => 1
    ]
];

// Výstup grafu a příjmů
echo '<div class="wrap"><h1> </h1>';
echo '<div style="display: flex; align-items: center;">';
echo '<div style="flex: 1;"><canvas id="customerChart" width="600" height="300"></canvas></div>';
echo '<div style="flex: 0 0 400px; margin-left: 20px; font-size: 16px;">
    <strong>Příjem v roce ' . $current_year . ':</strong><br> ' . number_format(array_sum($current_year_totals), 0, ',', ' ') . ' Kč<br><br>
    <strong>Příjem za posledních 12 měsíců:</strong><br> ' . number_format(array_sum(array_map('array_sum', $historical_totals)) + array_sum($current_year_totals), 0, ',', ' ') . ' Kč
</div>';
echo '</div>';

// Skript pro Chart.js
echo '
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
var ctx = document.getElementById("customerChart").getContext("2d");
var customerChart = new Chart(ctx, {
    type: "bar",
    data: {
        labels: ' . json_encode($months) . ',
        datasets: ' . json_encode($datasets) . '
    },
    options: {
        plugins: {
            tooltip: {
                callbacks: {
                    label: function(context) {
                        if (context.dataset.label === "Historie") {
                            const monthIndex = context.dataIndex;
                            const historicalData = ' . json_encode($historical_totals) . ';
                            const yearData = historicalData[monthIndex];
                            const tooltip = Object.keys(yearData)
                                .map(year => year + ": " + yearData[year].toLocaleString() + " Kč  | ")
                                .join("\n"); // Každý rok na nový řádek
                            return "Historie: | \n" + tooltip;
                        }
                        return context.dataset.label + ": " + context.raw.toLocaleString() + " Kč  | ";
                    }
                }
            }
        },
        scales: {
            x: {
                stacked: false,
                title: {
                    display: true,
                    text: "Měsíc"
                }
            },
            y: {
                beginAtZero: true,
                title: {
                    display: true,
                    text: "Částka (Kč)"
                }
            }
        },
        responsive: false
    }
});
</script>';


   
// Hromadné mazání záznamů
if (isset($_POST['delete_selected']) && !empty($_POST['delete_ids'])) {
    $delete_ids = array_map('intval', $_POST['delete_ids']); // IDs k mazání
    foreach ($delete_ids as $id) {
        $invoice_path = ABSPATH . 'invoices_me/faktura_' . $wpdb->get_var($wpdb->prepare("SELECT invoice_number FROM $table_name WHERE id = %d", $id)) . '.pdf';
        // Smazání záznamu z databáze
        $deleted = $wpdb->delete($table_name, ['id' => $id]);
        // Smazání souboru faktury, pokud existuje
        if ($deleted && file_exists($invoice_path)) {
            unlink($invoice_path);
        }
    }
    // Obnovení stránky po smazání
    echo '<script>window.location.reload();</script>';
}

// Načtení zákaznické tabulky a zobrazení s možností mazání záznamů i faktur
$customers = $wpdb->get_results("SELECT * FROM $table_name ORDER BY date DESC");

echo '<form method="post" onsubmit="return confirm(\'Opravdu chcete smazat vybrané záznamy a související faktury?\');">';
echo '<div style="max-height: 500px; overflow-y: auto; border: 1px solid #ccc;">';
echo '<table class="wp-list-table widefat fixed striped">';
echo '<thead><tr>
        <th style="width: 20px;">ID</th>
        <th style="width: 70px;">Jméno</th>
        <th style="width: 80px;">Příjmení</th>
        <th style="width: 130px;">Email</th>
        <th style="width: 70px;">Telefon</th>
        <th style="width: 130px;">Adresa</th>
        <th style="width: 80px;">Datum</th>
        <th style="width: 100px;">Produkt</th>
        <th style="width: 80px;">Částka</th>
        <th style="width: 50px;">Metoda</th>
        <th style="width: 60px;">Uhrazeno</th>
        <th style="width: 60px;">Faktura</th>
        <th style="display: flex; align-items: center;">
          <button type="submit" name="delete_selected">Smazat</button>
            <input type="checkbox" onclick="toggleCheckboxes(this)" style="transform: scale(1.2);">
        </th>
      </tr></thead><tbody>';

foreach ($customers as $row) {
    $invoice_path = ABSPATH . 'invoices_me/faktura_' . $row->invoice_number . '.pdf';

    echo '<tr>';
    echo '<td>' . esc_html($row->id) . '</td>';
    echo '<td>' . esc_html($row->first_name) . '</td>';
    echo '<td>' . esc_html($row->surname) . '</td>';
    echo '<td>' . esc_html($row->email) . '</td>';
    echo '<td>' . esc_html($row->phone) . '</td>';
    echo '<td>' . esc_html($row->address) . '</td>';
    echo '<td>' . date_i18n('j. n. Y', strtotime($row->date)) . '</td>';
    echo '<td>' . esc_html($row->product_name) . '</td>';
    echo '<td>' . esc_html($row->amount) . ' Kč</td>';
    echo '<td>' . esc_html($row->payment_method) . '</td>';
    echo '<td>' . esc_html($row->payment_status == 'paid' ? '✅' : '❌') . '</td>';
    echo '<td>' . (file_exists($invoice_path) ? '<a href="' . esc_url(home_url('/invoices_me/faktura_' . $row->invoice_number . '.pdf')) . '" target="_blank">' . esc_html($row->invoice_number) . '</a>' : '—') . '</td>';
    echo '<td><input type="checkbox" name="delete_ids[]" value="' . esc_attr($row->id) . '"></td>';
    echo '</tr>';
}

echo '</tbody></table>';
echo '</div>';
echo '</form>';

echo '
<script>
function toggleCheckboxes(source) {
    checkboxes = document.getElementsByName("delete_ids[]");
    for (var i = 0; i < checkboxes.length; i++) {
        checkboxes[i].checked = source.checked;
    }
}
</script>';









  // Zobrazení logu e-mailů
echo '<h2>Záznam odeslaných e-mailů</h2>';
echo '<div style="max-height: 150px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px;">';

$email_logs = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}zakaznici_email_log ORDER BY sent_at DESC");

if ($email_logs) {
    echo '<table class="widefat fixed striped">';
    echo '<thead><tr>
        <th style="width: 150px;">Datum</th>
        <th style="width: 250px;">E-mailová adresa</th>
        <th>Předmět</th>
    </tr></thead><tbody>';

    foreach ($email_logs as $log) {
        // Převod data na český formát
        $formatted_date = date_i18n('j. n. Y, H:i', strtotime($log->sent_at));

        echo '<tr class="email-row">';
        echo '<td>' . esc_html($formatted_date) . '</td>';
        echo '<td>' . esc_html($log->email_address) . '</td>';
        echo '<td>' . esc_html($log->email_subject) . ' <button class="toggle-email-content" style="margin-left: 10px;">Zobrazit</button></td>';
        echo '</tr>';

        // Skrytý řádek s obsahem e-mailu s HTML formátováním
        echo '<tr class="email-content" style="display: none;">
            <td colspan="3"><div>' . wp_kses_post($log->email_body) . '</div></td>
        </tr>';
    }

    echo '</tbody></table>';
} else {
    echo '<p>Žádné záznamy o odeslaných e-mailech.</p>';
}

echo '</div>';

// Přidání JavaScriptu pro zobrazení/skrytí obsahu e-mailu
echo '<script>
    document.addEventListener("DOMContentLoaded", function() {
        var toggleButtons = document.querySelectorAll(".toggle-email-content");
        
        toggleButtons.forEach(function(button) {
            button.addEventListener("click", function() {
                var emailContentRow = this.closest("tr").nextElementSibling;
                
                if (emailContentRow.style.display === "table-row") {
                    emailContentRow.style.display = "none";
                    this.textContent = "Zobrazit";
                } else {
                    emailContentRow.style.display = "table-row";
                    this.textContent = "Skrýt";
                }
            });
        });
    });
</script>';



// Získání hodnoty parent_payment_uid z options
$parent_payment_uid = get_option('parent_payment_uid', '');

// Pokud parent_payment_uid není nastaveno, zobrazíme tlačítko
if (empty($parent_payment_uid)) {
    echo '
    <div style="text-align: left; margin-top: 60px;">
        <a href="' . esc_url(home_url('/call_token.php')) . '" 
            style="display: inline-block; background-color: #0073aa; color: white; padding: 15px 30px; font-size: 18px; text-decoration: none; font-weight: bold;">
            Zadejte své platební údaje pro poplatek za platební formulář
        </a>
    </div>';
}




// Dynamicky získáme doménu pomocí funkce home_url()
$domena = home_url(); // Doména aktuálního webu
$faktury_url = $domena . '/export.php'; // URL na stránku s fakturami

echo '<div style="margin: 20px 0;">';
echo '<a href="' . esc_url($faktury_url) . '" style="font-size: 14px; text-decoration: underline; color: #0073aa;">Export zákazníků</a>';
echo '</div>';


// Dynamicky získáme doménu pomocí funkce home_url()
$domena = home_url(); // Doména aktuálního webu
$faktury_url = $domena . '/invoices_me.php'; // URL na stránku s fakturami

echo '<div style="margin: 20px 0;">';
echo '<a href="' . esc_url($faktury_url) . '" style="font-size: 14px; text-decoration: underline; color: #0073aa;">Export faktur, které jste vystavili zákazníkům</a>';
echo '</div>';


// Dynamicky získáme doménu pomocí funkce home_url()
$domena = home_url(); // Doména aktuálního webu
$faktury_url = $domena . '/invoices_received.php'; // URL na stránku s fakturami

echo '<div style="margin: 20px 0;">';
echo '<a href="' . esc_url($faktury_url) . '" style="font-size: 14px; text-decoration: underline; color: #0073aa;">Export faktur za používání platebního formuláře</a>';
echo '</div>';





// Zpracování formuláře pro uložení owner_email a nastavení faktur
if (isset($_POST['faktury_save'])) {
    update_option('owner_email', sanitize_email($_POST['owner_email']));
    update_option('faktury_jmeno', sanitize_text_field($_POST['faktury_jmeno']));
    update_option('faktury_adresa', sanitize_textarea_field($_POST['faktury_adresa']));
    update_option('faktury_ico', sanitize_text_field($_POST['faktury_ico']));
    update_option('faktury_email', sanitize_email($_POST['faktury_email']));
    update_option('faktury_web', sanitize_text_field($_POST['faktury_web']));
    update_option('faktury_logo', esc_url_raw($_POST['faktury_logo']));
    update_option('faktury_podpis', esc_url_raw($_POST['faktury_podpis']));

    // Přidání hodnot pro DPH a DIČ
    update_option('faktury_platce_dph', sanitize_text_field($_POST['faktury_platce_dph'] ?? 'ne'));
    update_option('faktury_dic', sanitize_text_field($_POST['faktury_dic'] ?? ''));
    update_option('faktury_dph_vyse', floatval($_POST['faktury_dph_vyse'] ?? 0));

    echo '<div class="updated"><p>Nastavení uloženo.</p></div>';
}

// Načtení uložených hodnot z databáze
$owner_email = get_option('owner_email', '');
$faktury_jmeno = get_option('faktury_jmeno', '');
$faktury_adresa = get_option('faktury_adresa', '');
$faktury_ico = get_option('faktury_ico', '');
$faktury_email = get_option('faktury_email', '');
$faktury_web = get_option('faktury_web', '');
$faktury_logo = get_option('faktury_logo', '');
$faktury_podpis = get_option('faktury_podpis', '');

// Načtení hodnot pro DPH a DIČ
$faktury_platce_dph = get_option('faktury_platce_dph', 'ne');
$faktury_dic = get_option('faktury_dic', '');
$faktury_dph_vyse = get_option('faktury_dph_vyse', 0);


// Zobrazení pole pro zadání owner_email a formuláře pro nastavení faktur
echo '<form method="post" action="">
    <table class="form-table">
        <tr>
            <th>Sem vám cinkne potvrzení o každé přijaté platbě (e-mail)</th>
            <td><input name="owner_email" type="email" value="' . esc_attr($owner_email) . '" class="regular-text"></td>
        </tr>
    </table>';





echo '<h2>Vaše údaje na automaticky generovanou fakturu</h2>'; // Přidání nadpisu

echo '<table class="form-table">
        <tr>
            <th>Plátce DPH</th>
            <td>
                <label class="switch">
                    <input type="checkbox" id="platce_dph_switch" name="faktury_platce_dph" value="ano" ' . checked($faktury_platce_dph, 'ano', false) . '>
                    <span class="slider round"></span>
                </label>
            </td>
        </tr>
        <tbody id="dph_content" style="display: none;">
            <tr>
                <th>Výše DPH (%)</th>
                <td><input name="faktury_dph_vyse" type="number" value="' . esc_attr($faktury_dph_vyse) . '" class="regular-text"></td>
            </tr>
        </tbody>
        <tr><th>Jméno dodavatele</th><td><input name="faktury_jmeno" type="text" value="' . esc_attr($faktury_jmeno) . '" class="regular-text"></td></tr>
        <tr><th>Adresa</th><td><textarea name="faktury_adresa" class="regular-text">' . esc_textarea($faktury_adresa) . '</textarea></td></tr>
        <tr><th>IČO</th><td><input name="faktury_ico" type="text" value="' . esc_attr($faktury_ico) . '" class="regular-text"></td></tr>
        <tr><th>DIČ</th><td><input name="faktury_dic" type="text" value="' . esc_attr($faktury_dic) . '" class="regular-text"></td></tr>
        <tr><th>Email</th><td><input name="faktury_email" type="email" value="' . esc_attr($faktury_email) . '" class="regular-text"></td></tr>
        <tr><th>Web</th><td><input name="faktury_web" type="text" value="' . esc_attr($faktury_web) . '" class="regular-text"></td></tr>
        <tr><th>Logo ve formátu jpg, png (nepovinné)</th><td>
            <input name="faktury_logo" type="text" id="faktury_logo" value="' . esc_attr($faktury_logo) . '" class="regular-text">
            <button type="button" class="button" id="upload_logo_button">Nahrát logo</button><br>
            <img src="' . esc_url($faktury_logo) . '" style="max-width: 100px; height: auto; margin-top: 10px;">
        </td></tr>
        <tr><th>Podpis ve formátu jpg, png (nepovinné)</th><td>
            <input name="faktury_podpis" type="text" id="faktury_podpis" value="' . esc_attr($faktury_podpis) . '" class="regular-text">
            <button type="button" class="button" id="upload_podpis_button">Nahrát podpis</button><br>
            <img src="' . esc_url($faktury_podpis) . '" style="max-width: 100px; height: auto; margin-top: 10px;">
        </td></tr>
    </table>
    <p class="submit"><input type="submit" name="faktury_save" value="Uložit změny" class="button button-primary"></p>
</form>';

echo '<style>
    .switch {
        position: relative;
        display: inline-block;
        width: 34px;
        height: 20px;
    }

    .switch input {
        display: none;
    }

    .slider {
        position: absolute;
        cursor: pointer;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: #ccc;
        transition: .4s;
        border-radius: 20px;
    }

    .slider:before {
        position: absolute;
        content: "";
        height: 14px;
        width: 14px;
        left: 3px;
        bottom: 3px;
        background-color: white;
        transition: .4s;
        border-radius: 50%;
    }

    input:checked + .slider {
        background-color: #4CAF50;
    }

    input:checked + .slider:before {
        transform: translateX(14px);
    }
</style>';

echo '<script>
    document.addEventListener("DOMContentLoaded", function () {
        var switcher = document.getElementById("platce_dph_switch");
        var dphContent = document.getElementById("dph_content");

        // Nastavit výchozí stav při načtení
        if (switcher && dphContent) {
            dphContent.style.display = switcher.checked ? "table-row-group" : "none";

            // Přepínání viditelnosti obsahu
            switcher.addEventListener("change", function () {
                dphContent.style.display = switcher.checked ? "table-row-group" : "none";
            });
        }
    });
</script>';
}

// Skript pro nahrávání obrázků přes Media Library
function media_uploader_script() {
    ?>
    <script>
    jQuery(document).ready(function($) {
        var logoUploader, podpisUploader;

        $('#upload_logo_button').click(function(e) {
            e.preventDefault();
            if (logoUploader) {
                logoUploader.open();
                return;
            }
            logoUploader = wp.media({
                title: 'Nahrát logo',
                button: { text: 'Vybrat logo' },
                multiple: false
            }).on('select', function() {
                var attachment = logoUploader.state().get('selection').first().toJSON();
                $('#faktury_logo').val(attachment.url);
            }).open();
        });

        $('#upload_podpis_button').click(function(e) {
            e.preventDefault();
            if (podpisUploader) {
                podpisUploader.open();
                return;
            }
            podpisUploader = wp.media({
                title: 'Nahrát podpis',
                button: { text: 'Vybrat podpis' },
                multiple: false
            }).on('select', function() {
                var attachment = podpisUploader.state().get('selection').first().toJSON();
                $('#faktury_podpis').val(attachment.url);
            }).open();
        });
    });
    </script>
    <?php
}
add_action('admin_footer', 'media_uploader_script');







// Responzivní CSS pro mobilní zařízení a zobrazení příjmu za aktuální měsíc
function custom_admin_css() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'zakaznici';

    // Získání aktuálního měsíce a součtu zaplacených objednávek pouze z produkčního prostředí
    $current_month = date('Y-m');

    $query = "
        SELECT COALESCE(SUM(amount), 0) 
        FROM $table_name 
        WHERE payment_status = 'paid' 
        AND api_url NOT LIKE '%demo%' 
        AND DATE_FORMAT(date, '%Y-%m') = '$current_month'
    ";
  
    $current_month_total = $wpdb->get_var($query);
  
    // CSS stylování a HTML pro souhrn příjmu za aktuální měsíc
    echo '<style>
        /* Kontejner */
        .wrap {
            padding: 10px;
        }
        
        /* Souhrn příjmu za aktuální měsíc */
        .current-month-summary {
            text-align: left;
            font-size: 16px;
            font-weight: bold;
            margin-bottom: 20px;
            color: black;
        }

        /* Skrytí příjmu za rok a 12 měsíců na mobilních zařízeních */
        @media (max-width: 768px) {
            .wrap div[style*="flex: 0 0 400px"] {
                display: none;
            }
            .wrap div[style*="display: flex"] {
                display: block;
                text-align: center;
            }
            .wrap canvas {
                max-width: 100%;
                height: auto;
            }
            .wrap div[style*="font-size: 16px"] {
                margin-top: 20px;
            }
        }
        
        /* Tabulka zákazníků */
        @media (max-width: 768px) {
            .wp-list-table {
                width: 100%;
                font-size: 14px;
            }
            .wp-list-table thead {
                display: none;
            }
            .wp-list-table tr {
                display: block;
                margin-bottom: 10px;
                border: 1px solid #ccc;
                padding: 10px;
            }
            .wp-list-table td {
                display: block;
                text-align: left;
                padding: 5px 0;
            }
            .wp-list-table td::before {
                content: attr(data-label);
                font-weight: bold;
                margin-right: 10px;
                color: #333;
            }
        }
        
        /* Formulář pro nahrávání obrázků */
        @media (max-width: 768px) {
            .form-table {
                width: 100%;
                margin-top: 20px;
            }
            .form-table th {
                display: block;
                text-align: left;
                font-weight: bold;
                margin-top: 10px;
            }
            .form-table td {
                display: block;
                width: 100%;
            }
            .form-table input, .form-table textarea {
                width: 100%;
                box-sizing: border-box;
            }
        }
    </style>';

if (is_admin() && current_user_can('manage_options') && isset($_GET['page']) && $_GET['page'] === 'zakaznici') {
    // Zajištění, že $current_month_total je číslo, pokud je výsledek prázdný
    $current_month_total = $current_month_total ?: 0; // Nastaví výchozí hodnotu 0, pokud je prázdné nebo null

    // Zobrazení příjmu za aktuální měsíc pod nadpisem "Zákazníci"
    echo '<script>
        document.addEventListener("DOMContentLoaded", function() {
            var titleElement = document.querySelector(".wrap > h1");
            if (titleElement) {
                var summaryElement = document.createElement("div");
                summaryElement.className = "current-month-summary";
                summaryElement.textContent = "Příjem za ' . date_i18n('F') . ': ' . number_format($current_month_total, 0, ',', ' ') . ' Kč";
                titleElement.insertAdjacentElement("afterend", summaryElement);
            }
        });
    </script>';
}

}
add_action('admin_head', 'custom_admin_css');








// Funkce pro kontrolu, zda má uživatel vlastní roli
function user_has_custom_role($user) {
    // Zkontrolujeme, zda $user je platný objekt WP_User
    if (!($user instanceof WP_User)) {
        return false;
    }

    // Definujeme standardní role WordPressu
    $default_roles = ['subscriber', 'contributor', 'author', 'editor', 'administrator'];

    // Projdeme role uživatele a vrátíme true, pokud má vlastní roli
    foreach ($user->roles as $role) {
        if (!in_array($role, $default_roles)) {
            return true;
        }
    }
    return false;
}





// Přidání vlastního metaboxu do stránky pro výběr rolí s přístupem
add_action('add_meta_boxes', function () {
    add_meta_box(
        'access_role_meta_box',               // ID metaboxu
        'Kdo má přístup',                     // Titulek metaboxu
        'display_access_role_meta_box',       // Callback funkce pro vykreslení
        'page',                               // Kam metabox přidat (zde 'page' pro stránky)
        'side',                               // Umístění (side, normal, advanced)
        'high'
    );
});

// Callback funkce pro vykreslení metaboxu
function display_access_role_meta_box($post)
{
    $selected_roles = get_post_meta($post->ID, '_access_roles', true); // Načtení vybraných rolí
    $roles = wp_roles()->get_names(); // Získání všech dostupných rolí ve WordPressu

    foreach ($roles as $role_key => $role_name) {
        // Označí checkbox, pokud je role v seznamu vybraných
        $checked = is_array($selected_roles) && in_array($role_key, $selected_roles) ? 'checked' : '';
        echo '<label><input type="checkbox" name="access_roles[]" value="' . esc_attr($role_key) . '" ' . $checked . '> ' . esc_html($role_name) . '</label><br>';
    }
}

// Uložení vybraných rolí při aktualizaci stránky
add_action('save_post', function ($post_id) {
    if (isset($_POST['access_roles'])) {
        $roles = array_map('sanitize_text_field', $_POST['access_roles']); // Sanitizace vstupů
        update_post_meta($post_id, '_access_roles', $roles); // Uložení rolí do post_meta
    } else {
        delete_post_meta($post_id, '_access_roles'); // Odstraní meta, pokud není žádná role vybraná
    }
});

// Omezení přístupu na stránku podle uložených rolí s garantovaným přístupem pro administrátora
add_action('template_redirect', function () {
    if (is_page()) {
        $post_id = get_queried_object_id(); // Načte ID aktuální stránky

        // Administrátor má vždy přístup, bez ohledu na nastavení
        if (current_user_can('administrator')) {
            return; // Ukončení funkce bez omezení
        }

        // Načtení uložených rolí z metaboxu
        $required_roles = get_post_meta($post_id, '_access_roles', true);

        // Pokud nejsou definované žádné role, povolit přístup všem
        if (empty($required_roles)) {
            return;
        }

        // Získání rolí aktuálního uživatele
        $user_roles = wp_get_current_user()->roles;

        // Kontrola, zda uživatel má alespoň jednu z povolených rolí
        if (!array_intersect($required_roles, $user_roles)) {
            // Pokud nemá povolenou roli, přesměrujeme ho na přihlašovací stránku
            wp_redirect(wp_login_url(get_permalink($post_id))); // Přesměrování zpět na stránku po přihlášení
            exit;
        }
    }
});

// Logování pro debugování upgradu
add_filter('upgrader_post_install', function ($response, $hook_extra, $result) {
    error_log('Aktualizace byla spuštěna.');
    error_log('Response: ' . print_r($response, true));
    error_log('Hook Extra: ' . print_r($hook_extra, true));
    error_log('Result: ' . print_r($result, true));
    return $response;
}, 10, 3);



                
 


?>