<?php
ob_start();
// Načtení WordPress prostředí z kořenového adresáře
$wordpress_path = dirname(__FILE__, 4) . '/wp-load.php';
if (file_exists($wordpress_path)) {
    require_once $wordpress_path;
    error_log("WordPress prostředí načteno úspěšně.");
} else {
    error_log("Chyba: wp-load.php nebyl nalezen.");
    exit("Chyba: wp-load.php nebyl nalezen.");
}

// Načtení ThePay API autoload z vendor adresáře
require_once dirname(__FILE__) . '/vendor/autoload.php';
error_log("ThePay API načteno úspěšně.");
use ThePay\ApiClient\TheConfig;
use ThePay\ApiClient\TheClient;
use GuzzleHttp\Client as GuzzleHttpClient;
use GuzzleHttp\Psr7\HttpFactory;
use ThePay\ApiClient\Model\RealizePaymentBySavedAuthorizationParams;
$api_url = 'https://platebniformular.cz/credentials.php?token=your_secret_token';
$response = file_get_contents($api_url);
if ($response === false) {
    die("Nepodařilo se načíst údaje ze vzdáleného serveru.");
}
$credentials = json_decode($response, true);
if (!isset($credentials['merchant_id'], $credentials['project_id'], $credentials['api_password'], $credentials['environment'])) {
    die("Neplatná odpověď z API.");
}
$merchant_id = $credentials['merchant_id'];
$project_id = $credentials['project_id'];
$api_password = $credentials['api_password'];
$environment = $credentials['environment'];
$return_url = home_url() . "/call_child.php"; 

// Konfigurace API
$api_url = ($environment === "production") ? "https://api.thepay.cz/" : "https://demo.api.thepay.cz/";
$config = new TheConfig($merchant_id, $project_id, $api_password, $api_url, $api_url);
$signatureService = new \ThePay\ApiClient\Service\SignatureService($config);
$httpClient = new GuzzleHttpClient();
$requestFactory = new HttpFactory();
$streamFactory = new HttpFactory();
$apiService = new \ThePay\ApiClient\Service\ApiService($config, $signatureService, $httpClient, $requestFactory, $streamFactory);
$thePayClient = new TheClient($config, $apiService);
$site_url = get_site_url();  


error_log("ThePay klient byl nastaven.");

// Získání uloženého UID z WordPress databáze
$parent_payment_uid = get_option('parent_payment_uid', ''); // UID platby, kde byla autorizace uložena
if (empty($parent_payment_uid)) {
    error_log("Chyba: Uložený UID platby nebyl nalezen.");
    exit("Chyba: Uložený UID platby nebyl nalezen.");
} else {
    error_log("Uložený UID platby: " . $parent_payment_uid);
}

// Zjištění aktuálního měsíce a roku
$aktualni_mesic = intval(date('n')); // Číslo měsíce 1-12
$aktualni_rok = intval(date('Y'));

// Zjištění předchozího měsíce a roku
$predchozi_mesic = $aktualni_mesic - 1;
$predchozi_rok = $aktualni_rok;

if ($predchozi_mesic == 0) {
    $predchozi_mesic = 12; // Pokud je leden, předchozí měsíc je prosinec
    $predchozi_rok = $aktualni_rok - 1;
}

// Formátování měsíce na dvouciferný formát
$formatted_mesic = str_pad($predchozi_mesic, 2, '0', STR_PAD_LEFT);
error_log("Předchozí měsíc: $formatted_mesic, rok: $predchozi_rok");

// Dynamický klíč pro zaplacenou částku za předchozí měsíc
$poplatek_key = 'poplatek_' . $predchozi_rok . '_' . $formatted_mesic;

// Načtení celkové zaplacené částky za předchozí měsíc z options
$total_paid = get_option($paid_key, 0); 
error_log("Celková zaplacená částka za předchozí měsíc ($paid_key): $total_paid");


// Převod na celé číslo pro další výpočty
$total_paid = intval($total_paid);
// Nastavení maximální hodnoty pro $amount
if ($total_paid > 59000) {
    $amount = 59000;
} else {
    $amount = $total_paid;
}


// Příprava nové platby s uloženou autorizací
$child_payment_uid = uniqid(); // Nové UID pro další platbu
error_log("Nové UID pro platbu: " . $child_payment_uid);

// Parametry pro platbu s uloženou autorizací
$realizePaymentParams = new RealizePaymentBySavedAuthorizationParams($child_payment_uid, $amount, 'CZK'); 

// Realizace platby
try {
    $response = $thePayClient->realizePaymentBySavedAuthorization($parent_payment_uid, $realizePaymentParams);
    if ($response->wasSuccessful()) {
        error_log("Platba byla úspěšně provedena.");

        // Uložení nového UID pro budoucí platby
        update_option('child_payment_uid', $child_payment_uid);

        $poplatek_zaplacen_key = 'poplatek_zaplacen_' . $predchozi_rok . '_' . $formatted_mesic;
        update_option($poplatek_zaplacen_key, 'ano');
        error_log("Poplatek byl označen jako zaplacen.");
        delete_option('payment_failed');



        // Získání základních dostupných údajů
        $payment_amount = $amount / 100;
        $payment_currency = "CZK";
        $payment_uid = $child_payment_uid;

        // Kontrola a logování objektu $response
        $response_details = is_object($response) ? print_r($response, true) : $response;
        error_log("Detaily platby: Stav - $response_details, Částka - $payment_amount $payment_currency, UID - $payment_uid");

        // Fakturační údaje
        $faktury_jmeno = get_option('faktury_jmeno', ''); // Jméno dodavatele
        $faktury_adresa = get_option('faktury_adresa', ''); // Adresa dodavatele
        $faktury_email = get_option('faktury_email', ''); // E-mail dodavatele
        $web_adresa = $_SERVER['HTTP_HOST'];


        // Kontrola a načtení IČO
        if (get_option('faktury_ico') === false) {
        add_option('faktury_ico', ''); // Přidá výchozí hodnotu, pokud neexistuje
        }
        $faktury_ico = get_option('faktury_ico', '');

       // Kontrola a načtení DIČ
       if (get_option('faktury_dic') === false) {
       add_option('faktury_dic', ''); // Přidá výchozí hodnotu, pokud neexistuje
       }
       $faktury_dic = get_option('faktury_dic', '');


        // Odeslání informací o platbě a fakturačních údajů na externí server
        $ch = curl_init('https://www.platebniformular.cz/generate_invoice.php');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, [
            'payment_uid' => $payment_uid,
            'amount' => $payment_amount,
            'currency' => $payment_currency,
            'faktury_jmeno' => $faktury_jmeno,
            'faktury_adresa' => $faktury_adresa,
            'faktury_email' => $faktury_email,
            'web_adresa' => $web_adresa,
            'site_url' => $site_url  
        ]);


        // Přidání IČO, DIČ a výše DPH pouze pokud jsou vyplněny
        if (!empty($faktury_ico)) {
        $curl_data['faktury_ico'] = $faktury_ico;
        }
        if (!empty($faktury_dic)) {
        $curl_data['faktury_dic'] = $faktury_dic;
        }

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        if ($response === false) {
            error_log("Chyba při odesílání na externí server: " . curl_error($ch));
        } else {
            error_log("Odeslání informací na fakturu na externí server bylo úspěšné.");
        }
        curl_close($ch);

        exit();
    } else {
        // Chyba platby
        error_log("Platba se nezdařila. Odpověď API: " . print_r($response, true));
        update_option('payment_failed', 'ano');
    }
} catch (Exception $e) {
    // Zpracování chyby
    error_log("Chyba při realizaci platby: " . $e->getMessage());
}
ob_end_clean();
?>