<?php
ob_start(); // Bufferování výstupu, aby se zabránilo chybám s hlavičkami

if (!isset($_POST["amount"]) || !is_numeric($_POST["amount"]) || $_POST["amount"] <= 0) {
    exit("Neplatná částka");
}

// Načtení WordPress prostředí
require_once dirname(__FILE__) . "/wp-load.php";
require_once "wp-content/plugins/platebni-formular/vendor/autoload.php"; // Načtení Composer autoload

use ThePay\ApiClient\TheConfig;
use ThePay\ApiClient\TheClient;
use ThePay\ApiClient\Model\CreatePaymentParams;
use ThePay\ApiClient\Service\ApiService;
use ThePay\ApiClient\Service\SignatureService;
use GuzzleHttp\Client as GuzzleHttpClient;
use GuzzleHttp\Psr7\HttpFactory;

$amount = intval($_POST["amount"]) * 100; // Částka v haléřích
$payment_method = isset($_POST['payment_method']) ? sanitize_text_field($_POST['payment_method']) : '';


// FIO
if ($payment_method === 'fio') {
    // Platba přes Fio - generování QR kódu
    $vs = str_pad(substr(time(), -4), 4, '0', STR_PAD_LEFT) . rand(100, 999);

    // URL pro generování QR kódu pro Fio
    $fio_account = get_option('fio_account_number');
    if (!$fio_account) {
        exit("Chyba: Číslo účtu Fio není nastaveno.");
    }

    $fio_bank_code = "2010";      
    $product_name = isset($_POST["product_name"]) && !is_null($_POST["product_name"]) ? sanitize_text_field($_POST["product_name"]) : "";
    //$fio_message = "$vs";  // Zpráva pro platbu s variabilním symbolem
    $fio_message = "$product_name";  // Zpráva pro platbu s variabilním symbolem


    // Generování QR kódu
    $qr_url = "https://api.paylibo.com/paylibo/generator/czech/image?accountNumber=$fio_account&bankCode=$fio_bank_code&amount=" . number_format($amount / 100, 2, '.', '') . "&currency=CZK&vs=$vs&message=" . urlencode($fio_message) . "&size=200";


 // Výstup pro uživatele
    echo "<div class='payment-container'>";
    echo "<div class='qr-code'><img alt='QR platba' src='$qr_url' /></div>";

    echo "<p class='transfer-title'>Zaplaťte QR nebo převodem:</p>";
    echo "<div class='payment-details'>";
    echo "<p><strong>Částka:</strong> " . number_format($amount / 100, 2, '.', '') . " Kč</p>";
    echo "<p><strong>Číslo účtu:</strong> $fio_account/2010</p>";
    echo "<p><strong>Variabilní symbol:</strong> $vs</p>";
    echo "</div>";
    echo "</div>";
 
    // Cesta k požadované stránce pro přesměrování
$redirect_url = 'https://' . $_SERVER['HTTP_HOST'] . '/call_api.php'; 
// Tlačítko pro přesměrování
echo "<form method='post' action='$redirect_url'>";
echo "<input type='submit' name='payment_confirmed' value='Potvrďte, že jste zaplatili' class='payment-confirm-button'>";
echo "</form>";

    // Uložení údajů o platbě
    save($vs); // Zde definujte funkci save() 

?>
<style>
    .payment-container {
        text-align: center;
        font-family: 'Arial', sans-serif;
        color: #333;
        padding: 30px;
        background-color: #f9f9f9;
        border-radius: 8px;
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
        max-width: 600px;
        margin: 0 auto;
    }

    .qr-title {
        font-size: 18px;
        font-weight: bold;
        color: #34bd19;
        margin-bottom: 20px;
    }

    .qr-code img {
        max-width: 100%;
        height: auto;
        border-radius: 10px;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }

    .transfer-title {
        font-size: 18px;
        font-weight: bold;
        color: #333;
        margin-top: 40px;
        margin-bottom: 10px;
    }

    .payment-details {
        background-color: #fff;
        padding: 20px;
        border-radius: 8px;
        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
        margin-top: 20px;
        text-align: left;
    }

    .payment-details p {
        font-size: 16px;
        margin-bottom: 10px;
    }

    .payment-details strong {
        color: #34bd19;
    }

.payment-confirm-button {
    background-color: #34bd19; /* Zelená barva */
    color: white;
    font-size: 20px;
    font-weight: bold;
    padding: 20px 40px;
    border: none;
    border-radius: 10px;
    cursor: pointer;
    transition: background-color 0.3s ease, transform 0.2s ease;
    margin-top: 30px;
    display: block; /* Zajistí, že tlačítko bude blokový element */
    margin-left: auto; /* Horizontálně zarovná tlačítko na střed */
    margin-right: auto; /* Horizontálně zarovná tlačítko na střed */
    width: auto; /* Tlačítko nebude na celou šířku */
    max-width: 400px; /* Maximální šířka tlačítka */
}
/* Efekt při hoveru */
.payment-confirm-button:hover {
    background-color: #2a9c16; /* Tmavší zelená */
    transform: scale(1.05); /* Zvýraznění tlačítka */
}
</style>
<?php


//THE PAY
} else {

$merchant_id = $_POST["merchant_id"];
$project_id = intval($_POST["project_id"]);
$api_password = $_POST["api_password"];
$environment = $_POST["environment"];


// Definování URL pro API a bránu na základě prostředí
$api_url = ($environment === "production") ? "https://gate.thepay.cz/" : "https://demo.gate.thepay.cz/";
$gate_url = ($environment === "production") ? "https://gate.thepay.cz/" : "https://demo.gate.thepay.cz/";
$uid = uniqid();

$config = new TheConfig($merchant_id, $project_id, $api_password, $api_url, $gate_url);
$signatureService = new SignatureService($config);
$httpClient = new GuzzleHttpClient();
$requestFactory = new HttpFactory();
$streamFactory = new HttpFactory();
$apiService = new ApiService($config, $signatureService, $httpClient, $requestFactory, $streamFactory);
$thePayClient = new TheClient($config, $apiService);

// Dynamické generování return_url na základě aktuální domény
$domain = home_url(); // Získá základní URL webu
$return_url = $domain . "/call.php"; // Generování dynamického return URL

// Přidání return_url a notif_url do parametrů platby
$params = new CreatePaymentParams($amount, "CZK", $uid, "cs");
$params->setReturnUrl($return_url); // Nastavení return URL
$params->setNotifUrl($return_url); // Nastavení notif URL (stejné jako return URL)

try {
    // Pokus o vytvoření platby
    $response = $thePayClient->createPayment($params);
    $pay_url = $response->getPayUrl();

    save_customer_data($uid); // Zde voláme funkci pro uložení dat s předáním UID

    // Přesměrování na platební bránu
    header("Location: " . $pay_url);
    exit();
} catch (Exception $e) {
    // Extrahování chybové zprávy
    $errorMessage = $e->getMessage();

    // Detekce specifických chyb a zobrazení videa
if (
    strpos($errorMessage, "404 Not Found") !== false || 
    strpos($errorMessage, "Project was not found") !== false || 
    strpos($errorMessage, "project_id: \"0\" must have minimum value: 1") !== false ||
    (strpos($errorMessage, "403 Forbidden") !== false && strpos($errorMessage, "Merchant not found") !== false) ||
    strpos($errorMessage, "400 Bad Request") !== false
) {
    echo "<div style=\"text-align: center; font-family: Arial, sans-serif; padding-top: 50px;\">";
    echo "<p style=\"font-size: 18px; color: #333;\">Platba nemohla být provedena, protože platební brána není správně implementována.</p>";
    echo "<p style=\"font-size: 18px; color: #333;\">Implementujte bránu podle videa:</p>";
    echo "<iframe src=\"https://player.vimeo.com/video/1029226517?autoplay=0\" width=\"800\" height=\"450\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen style=\"margin-top: 20px;\"></iframe>";
    echo "<p style=\"margin-top: 30px; font-size: 16px;\"><a href=\"https://www.thepay.eu/cs/\" target=\"_blank\" style=\"color: #0066cc; text-decoration: none;\">Přejít na platební bránu ThePay</a></p>";
    echo "</div>";
} else {
    // Zobrazení obecné chyby
    echo "Chyba při vytváření platby: " . $errorMessage . "<br>";
    echo "Zkontrolujte následující možnosti:<br>";
    echo "- Máte správně vyplněné ID obchodníka, ID projektu a heslo API?<br>";
    echo "- Vybrali jste správně prostředí (demo nebo ostré)?<br>";
    echo "- Je vaše IP adresa přidána v seznamu povolených IP adres v nastavení ThePay?<br>";
}
exit();

}

ob_end_flush(); // Vypiš obsah výstupního bufferu
}










    function save_customer_data($uid) {
    global $wpdb, $api_url, $gate_url, $pay_url; // Přístup k globálním proměnným
    $table_name = $wpdb->prefix . "zakaznici"; // Název tabulky

    // 1. Kontrola, zda je zadaný e-mail
    $email = isset($_POST["email"]) ? sanitize_email($_POST["email"]) : null;

    if (empty($email) || !is_email($email)) {
        error_log("Invalid email: " . var_export($email, true));
        return;
    }

 // 2. Sanitizace dalších vstupů
$first_name = isset($_POST["first_name"]) && !is_null($_POST["first_name"]) ? sanitize_text_field($_POST["first_name"]) : "";
$surname = isset($_POST["surname"]) && !is_null($_POST["surname"]) ? sanitize_text_field($_POST["surname"]) : "";
$phone = isset($_POST["phone"]) && !is_null($_POST["phone"]) ? sanitize_text_field($_POST["phone"]) : "";
$address = isset($_POST["address"]) && !is_null($_POST["address"]) ? sanitize_text_field($_POST["address"]) : "";
$amount = isset($_POST["amount"]) && !is_null($_POST["amount"]) ? floatval($_POST["amount"]) : 0;
$discount_code = isset($_POST["discount_code"]) && !is_null($_POST["discount_code"]) ? sanitize_text_field($_POST["discount_code"]) : "";
$product_name = isset($_POST["product_name"]) && !is_null($_POST["product_name"]) ? sanitize_text_field($_POST["product_name"]) : "";
$environment = isset($_POST["environment"]) ? $_POST["environment"] : "production"; // Default to 'production' if not set

$api_url = esc_url(($environment === "production") ? "https://api.thepay.cz/" : "https://demo.api.thepay.cz/");
$gate_url = esc_url(($environment === "production") ? "https://gate.thepay.cz/" : "https://demo.gate.thepay.cz/");

$email_subject = isset($_POST["email_subject"]) && !is_null($_POST["email_subject"]) ? sanitize_text_field($_POST["email_subject"]) : "";
$email_body = isset($_POST["email_body"]) && !is_null($_POST["email_body"]) ? sanitize_textarea_field($_POST["email_body"]) : "";
$email_from = isset($_POST["email_from"]) && !is_null($_POST["email_from"]) ? sanitize_email($_POST["email_from"]) : "";
$email_from_name = isset($_POST["email_from_name"]) && !is_null($_POST["email_from_name"]) ? sanitize_text_field($_POST["email_from_name"]) : "";
$navratova_url = isset($_POST["navratova_url"]) ? $_POST["navratova_url"] : "";
$pay_url = esc_url(isset($pay_url) ? $pay_url : "");

$reminder_subject = isset($_POST["reminder_subject"]) && !is_null($_POST["reminder_subject"]) ? sanitize_text_field($_POST["reminder_subject"]) : "";
$reminder_body = isset($_POST["reminder_body"]) && !is_null($_POST["reminder_body"]) ? sanitize_textarea_field($_POST["reminder_body"]) : "";

$merchant_id = isset($_POST["merchant_id"]) && !is_null($_POST["merchant_id"]) ? sanitize_text_field($_POST["merchant_id"]) : "";
$project_id = isset($_POST["project_id"]) && !is_null($_POST["project_id"]) ? intval($_POST["project_id"]) : 0;
$api_password = isset($_POST["api_password"]) && !is_null($_POST["api_password"]) ? sanitize_text_field($_POST["api_password"]) : "";
$vytvorit_profil = isset($_POST["vytvorit_profil"]) && !is_null($_POST["vytvorit_profil"]) ? intval($_POST["vytvorit_profil"]) : 0;
$login_url = isset($_POST["login_url"]) && !is_null($_POST["login_url"]) ? esc_url($_POST["login_url"]) : "";
$ico = isset($_POST["ico"]) && !is_null($_POST["ico"]) ? sanitize_text_field($_POST["ico"]) : "";
$dic = isset($_POST["dic"]) && !is_null($_POST["dic"]) ? sanitize_text_field($_POST["dic"]) : "";
$company = isset($_POST["company"]) && !is_null($_POST["company"]) ? sanitize_text_field($_POST["company"]) : "";

// Zajistí, že pokud některé hodnoty nejsou nastavena, budou mít prázdný řetězec místo null


    // 4. Uložení dat do tabulky zákazníků
    $current_time = current_time("mysql");
    $result = $wpdb->insert(
        $table_name,
        array(
            "first_name" => $first_name,
            "surname" => $surname,
            "email" => $email,
            "phone" => $phone,
            "address" => $address,
            "amount" => $amount,
            "discount_code" => $discount_code,
            "product_name" => $product_name,
            "uid" => $uid, // Použití předaného UID
            "date" => $current_time, // Přidání aktuálního data
            "email_subject" => $email_subject,
            "email_body" => $email_body,
            "reminder_subject" => $reminder_subject,
            "reminder_body" => $reminder_body,
            "api_url" => $api_url,
            "gate_url" => $gate_url,
            "email_from" => $email_from, 
            "navratova_url" => $navratova_url,
            "merchant_id" => $merchant_id, 
            "project_id" => $project_id,  
            "api_password" => $api_password,
            "pay_url" => $pay_url,
            "vytvorit_profil" => $vytvorit_profil,
            "login_url" => $login_url,
            "email_from_name" => $email_from_name,
            "ico" => $ico,
            "dic" => $dic,
            "company" => $company,
        ),
        array(
            "%s", "%s", "%s", "%s", "%s", "%f", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%d", "%s", "%s", "%d", "%s", "%s", "%s", "%s", "%s"
        )
    );

    // 5. Logování výsledků uložení
    if ($result === false) {
        error_log("Error inserting customer data: " . $wpdb->last_error);
    } else {
        error_log("Customer data inserted successfully.");
    }
}








    function save($vs) {
    global $wpdb, $api_url, $gate_url, $pay_url; // Přístup k globálním proměnným
    $table_name = $wpdb->prefix . "zakaznici"; // Název tabulky

    // 1. Kontrola, zda je zadaný e-mail
    $email = isset($_POST["email"]) ? sanitize_email($_POST["email"]) : null;

    if (empty($email) || !is_email($email)) {
        error_log("Invalid email: " . var_export($email, true));
        return;
    }

   // 2. Sanitizace dalších vstupů
$first_name = isset($_POST["first_name"]) && !is_null($_POST["first_name"]) ? sanitize_text_field($_POST["first_name"]) : "";
$surname = isset($_POST["surname"]) && !is_null($_POST["surname"]) ? sanitize_text_field($_POST["surname"]) : "";
$phone = isset($_POST["phone"]) && !is_null($_POST["phone"]) ? sanitize_text_field($_POST["phone"]) : "";
$address = isset($_POST["address"]) && !is_null($_POST["address"]) ? sanitize_text_field($_POST["address"]) : "";
$amount = isset($_POST["amount"]) && !is_null($_POST["amount"]) ? floatval($_POST["amount"]) : 0;
$discount_code = isset($_POST["discount_code"]) && !is_null($_POST["discount_code"]) ? sanitize_text_field($_POST["discount_code"]) : "";
$product_name = isset($_POST["product_name"]) && !is_null($_POST["product_name"]) ? sanitize_text_field($_POST["product_name"]) : "";
$environment = isset($_POST["environment"]) ? $_POST["environment"] : "production"; // Default to 'production' if not set

$api_url = esc_url(($environment === "production") ? "https://api.thepay.cz/" : "https://demo.api.thepay.cz/");
$gate_url = esc_url(($environment === "production") ? "https://gate.thepay.cz/" : "https://demo.gate.thepay.cz/");

$email_subject = isset($_POST["email_subject"]) && !is_null($_POST["email_subject"]) ? sanitize_text_field($_POST["email_subject"]) : "";
$email_body = isset($_POST["email_body"]) && !is_null($_POST["email_body"]) ? sanitize_textarea_field($_POST["email_body"]) : "";
$email_from = isset($_POST["email_from"]) && !is_null($_POST["email_from"]) ? sanitize_email($_POST["email_from"]) : "";
$email_from_name = isset($_POST["email_from_name"]) && !is_null($_POST["email_from_name"]) ? sanitize_text_field($_POST["email_from_name"]) : "";
$navratova_url = isset($_POST["navratova_url"]) ? $_POST["navratova_url"] : "";
$pay_url = esc_url(isset($pay_url) ? $pay_url : "");

$reminder_subject = isset($_POST["reminder_subject"]) && !is_null($_POST["reminder_subject"]) ? sanitize_text_field($_POST["reminder_subject"]) : "";
$reminder_body = isset($_POST["reminder_body"]) && !is_null($_POST["reminder_body"]) ? sanitize_textarea_field($_POST["reminder_body"]) : "";

$merchant_id = isset($_POST["merchant_id"]) && !is_null($_POST["merchant_id"]) ? sanitize_text_field($_POST["merchant_id"]) : "";
$project_id = isset($_POST["project_id"]) && !is_null($_POST["project_id"]) ? intval($_POST["project_id"]) : 0;
$api_password = isset($_POST["api_password"]) && !is_null($_POST["api_password"]) ? sanitize_text_field($_POST["api_password"]) : "";
$vytvorit_profil = isset($_POST["vytvorit_profil"]) && !is_null($_POST["vytvorit_profil"]) ? intval($_POST["vytvorit_profil"]) : 0;
$login_url = isset($_POST["login_url"]) && !is_null($_POST["login_url"]) ? esc_url($_POST["login_url"]) : "";
$ico = isset($_POST["ico"]) && !is_null($_POST["ico"]) ? sanitize_text_field($_POST["ico"]) : "";
$dic = isset($_POST["dic"]) && !is_null($_POST["dic"]) ? sanitize_text_field($_POST["dic"]) : "";
$company = isset($_POST["company"]) && !is_null($_POST["company"]) ? sanitize_text_field($_POST["company"]) : "";

// Zajistí, že pokud některé hodnoty nejsou nastavena, budou mít prázdný řetězec místo null



    // 4. Uložení dat do tabulky zákazníků
    $current_time = current_time("mysql");
    $result = $wpdb->insert(
        $table_name,
        array(
            "first_name" => $first_name,
            "surname" => $surname,
            "email" => $email,
            "phone" => $phone,
            "address" => $address,
            "amount" => $amount,
            "discount_code" => $discount_code,
            "product_name" => $product_name,
            "uid" => 0,
            "date" => $current_time, // Přidání aktuálního data
            "email_subject" => $email_subject,
            "email_body" => $email_body,
            "reminder_subject" => $reminder_subject,
            "reminder_body" => $reminder_body,
            "api_url" => $api_url,
            "gate_url" => $gate_url,
            "email_from" => $email_from, 
            "navratova_url" => $navratova_url,
            "merchant_id" => $merchant_id, 
            "project_id" => $project_id,  
            "api_password" => $api_password,
            "pay_url" => $pay_url,
            "vytvorit_profil" => $vytvorit_profil,
            "login_url" => $login_url,
            "email_from_name" => $email_from_name,
            "ico" => $ico,
            "dic" => $dic,
            "company" => $company,
            "vs" => $vs,
        ),
        array(
            "%s", "%s", "%s", "%s", "%s", "%f", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%d", "%s", "%s", "%d", "%s", "%s", "%s", "%s", "%s", "%s"
        )
    );
}
?>