<?php
// 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;
} else {
    exit("Chyba: wp-load.php nebyl nalezen.");
}


// Načtení PHPMailer autoload z vendor_mailer adresáře
$phpmailer_autoload_path = dirname(__FILE__) . '/vendor_mailer/autoload.php';

if (file_exists($phpmailer_autoload_path)) {
    require_once $phpmailer_autoload_path;
} else {
    exit("Chyba: Autoloader pro PHPMailer nebyl nalezen.");
}

// Načtení PHPMailer tříd
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;


global $wpdb;


// Načtení zákazníků s nevyplněným payment_status a vyplněným variabilním symbolem (VS)
$table_name = $wpdb->prefix . "zakaznici";
$customers = $wpdb->get_results(
    "SELECT id, first_name, surname, email, vs 
     FROM $table_name 
     WHERE vs IS NOT NULL AND vs != '' AND (payment_status IS NULL OR payment_status = '')",
    ARRAY_A
);


// Zadej svůj API token
$apiToken = get_option('fio_api_token');

// Získání aktuálního data
$currentDate = new DateTime();
$startDate = $currentDate->modify('-2 days')->format('Y-m-d');
$endDate = (new DateTime())->format('Y-m-d');

// Nastavení pro API požadavek
$apiUrl = 'https://fioapi.fio.cz/v1/rest/periods/' . $apiToken . '/' . $startDate . '/' . $endDate . '/transactions.json';

// Inicializace cURL
$ch = curl_init();

// Nastavení cURL pro požadavek
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
));

// Povolení výpisu hlaviček pro ladění
curl_setopt($ch, CURLOPT_HEADER, false); // Zamezíme výpisu hlaviček

// Spuštění požadavku
$response = curl_exec($ch);

// Kontrola chyb
if (curl_errno($ch)) {
    echo 'Chyba cURL: ' . curl_error($ch);
    exit;
}

// Zavření cURL
curl_close($ch);

// Dekódování těla odpovědi
$data = json_decode($response, true);

// Zkontrolujeme, zda jsou transakce ve správné struktuře
$transactions = []; // Pole pro uchování transakcí
if (isset($data['accountStatement']['transactionList']['transaction'])) {
    if (empty($data['accountStatement']['transactionList']['transaction'])) {
        // Žádné transakce nejsou k dispozici, nic se neděje
    } else {
        // Uložení příchozích plateb
        foreach ($data['accountStatement']['transactionList']['transaction'] as $transaction) {
            if ($transaction['column1']['value'] > 0) { // Příchozí platba (částka kladná)
                $vs = isset($transaction['column5']['value']) ? $transaction['column5']['value'] : 'Neznámý VS';
                // Uložení informací o transakci do pole
                $transactions[] = [
                    'vs' => $vs,
                    'amount' => $transaction['column1']['value']
                ];
            }
        }
    }
} else {
    // Odpověď neobsahuje transakce
}


// Globální číslování záznamů
$global_index = 1;




$tcpdf_autoload_path = dirname(__FILE__) . '/vendor_faktura/tecnickcom/tcpdf/tcpdf.php';
$faktury_jmeno = get_option('faktury_jmeno', 'Firma s.r.o.');
$faktury_adresa = get_option('faktury_adresa', 'Ulice 123, Město 456 78');
$faktury_ico = get_option('faktury_ico', '12345678');
$faktury_email = get_option('faktury_email', 'info@firma.cz');
$faktury_web = get_option('faktury_web', 'www.firma.cz');
$faktury_logo = get_option('faktury_logo', '');
$faktury_podpis = get_option('faktury_podpis', '');
$is_vat_payer = get_option('faktury_platce_dph', 'ne') === 'ano';
$vat_rate = floatval(get_option('faktury_dph_vyse', 0)); // Výše DPH v procentech
$vat_id = get_option('faktury_dic', ''); // DIČ dodavatele


// Funkce pro konverzi obrázku na 8bitovou hloubku a odstranění průhlednosti
function convertToJpegWithout($imagePath) {
    $imageInfo = getimagesize($imagePath);
    if ($imageInfo['mime'] === 'image/png') {
        $image = imagecreatefrompng($imagePath);
    } elseif ($imageInfo['mime'] === 'image/jpeg') {
        return $imagePath; // Pokud je již JPEG, vrátí původní obrázek
    } else {
        return $imagePath; // Pokud není PNG nebo JPEG, vrátí původní obrázek
    }
    
    // Vytvoří nový obraz bez průhlednosti
    $newImage = imagecreatetruecolor(imagesx($image), imagesy($image));
    $whiteBackground = imagecolorallocate($newImage, 255, 255, 255);
    imagefill($newImage, 0, 0, $whiteBackground); // Bílá barva pozadí
    imagecopy($newImage, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));

    $outputPath = sys_get_temp_dir() . '/' . uniqid() . '.jpg';
    imagejpeg($newImage, $outputPath, 90); // Uloží obrázek jako JPEG s bílým pozadím
    imagedestroy($image);
    imagedestroy($newImage);
    return $outputPath;
}


function send_meta_purchase_min($customer_data, $event_id) {

    $pixel_id = get_option('meta_pixel_id');
    $token    = get_option('meta_capi_token');

    if (!$pixel_id || !$token) {
        error_log("META CAPI: chybí pixel_id nebo token.");
        return;
    }

    $email = strtolower(trim((string)$customer_data->email));
    if (!$email) {
        error_log("META CAPI: chybí email.");
        return;
    }

    $payload = [
        'data' => [[
            'event_name' => 'Purchase',
            'event_time' => time(),
            'event_id' => (string)$event_id,
            'action_source' => 'website',
            'user_data' => [
                'em' => [ hash('sha256', $email) ],
                'client_ip_address' => $_SERVER['REMOTE_ADDR'] ?? null,
                'client_user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? null,
            ],
            'custom_data' => [
                'currency' => 'CZK',
                'value' => (float)$customer_data->amount,
            ],
        ]],
    ];

    $url = "https://graph.facebook.com/v20.0/{$pixel_id}/events?access_token=" . urlencode($token);

    $res = wp_remote_post($url, [
        'headers' => ['Content-Type' => 'application/json'],
        'body'    => wp_json_encode($payload),
        'timeout' => 5,
    ]);

    if (is_wp_error($res)) {
        error_log("META CAPI: chyba - " . $res->get_error_message());
    } else {
        $body = wp_remote_retrieve_body($res);
        error_log("META CAPI: ok event_id={$event_id} response={$body}");
    }
}





foreach ($customers as $customer) {
    $customerVS = $customer['vs'];

    // Pro každý zákazník porovnáme s transakcemi z Fio API
    foreach ($transactions as $transaction) {
        if ($customerVS == $transaction['vs']) {
   

            // Načtení odpovídajícího zákaznického záznamu
            $customer_id = $customer['id'];
            $matching_customers = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $customer_id));


if ($matching_customers) {
    foreach ($matching_customers as $customer_data) {


        // Načtení login_url (pokud není přímo v $customer_data, zajistíme, že je v dotazu v DB)
        $login_url = isset($customer_data->login_url) ? esc_url($customer_data->login_url) : 'URL nenalezena';


        // Načtení hodnoty vytvorit_profil
        $vytvorit_profil = $wpdb->get_var($wpdb->prepare(
            "SELECT vytvorit_profil FROM $table_name WHERE id = %d",
            $customer_data->id
        ));

        // Nastavení proměnné create_profile
        $create_profile = ($vytvorit_profil == 1);

  
    //Notifikace o platbe
    $remote_url = 'https://platebniformular.cz/record_sale.php'; 
    $site_url = get_site_url(); // Get the WordPress site URL  
    $response = wp_remote_post($remote_url, array(
        'method'    => 'POST',
        'body'      => array(
            'amount'    => $customer_data->amount,
            'site_url'  => $site_url,  // Send the website URL
        ),
        'timeout'   => 10,
    ));
    


// Generování čísla faktury
$year = date('Y');

// Pokud je variabilní symbol dostupný, použijeme ho, jinak použijeme ID zákazníka
$invoice_base = !empty($customer_data->vs) ? $customer_data->vs : $customer_data->id;

// Generování čísla faktury (formát: RRRR-VS nebo RRRR-ID)
$invoice_number = $year . '-' . str_pad($invoice_base, 6, '0', STR_PAD_LEFT);

// Uložení čísla faktury do databáze
$update_result = $wpdb->update(
    $table_name,
    array('invoice_number' => $invoice_number),
    array('id' => $customer_data->id)
);



// Výpočet cen
$total_with_vat = floatval($customer_data->amount); // Cena s DPH
$vat_amount = $is_vat_payer ? ($total_with_vat * $vat_rate) / (100 + $vat_rate) : 0; // Daňová částka
$total_without_vat = $is_vat_payer ? $total_with_vat - $vat_amount : $total_with_vat;

if (file_exists($tcpdf_autoload_path)) {
    require_once $tcpdf_autoload_path;
} else {
    exit("Chyba: Autoloader pro TCPDF nebyl nalezen.");
}


// Generování faktury pomocí TCPDF
$pdf = new TCPDF();
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Platebni formular');
$pdf->SetTitle('Faktura');
$pdf->SetSubject('Faktura');
$pdf->SetFont('freeserif', '', 12);
$pdf->AddPage();

// Definování cesty k zástupným obrázkům a konverze na JPEG bez průhlednosti
$placeholder_logo = convertToJpegWithout(__DIR__ . '/white1.png');
$placeholder_signature = convertToJpegWithout(__DIR__ . '/white2.png');

// Vložení loga nebo zástupného obrázku, pokud není logo dostupné
$logo_path = !empty($faktury_logo) ? convertToJpegWithout($faktury_logo) : $placeholder_logo;
$pdf->Image($logo_path, 10, 20, 0, 30, 'JPEG', '', 'T', false, 300, '', false, false, 0, false, false, false);
$pdf->Ln(20);

$invoice_title = "Faktura č. $invoice_number";
$vat_status = $is_vat_payer ? 'Plátce DPH' : 'Neplátce DPH';



// HTML obsah faktury
$html = '
<table border="0" cellspacing="0" cellpadding="5">
    <!-- Nadpis faktury nebo upozornění, že se nejedná o fakturu -->
    <tr><td style="text-align: right; font-size: 16pt; font-weight: bold;">' . $invoice_title . '</td></tr>
    <tr><td style="text-align: right; font-size: 10pt; font-style: italic;">' . $vat_status . '</td></tr>
    <tr><td style="text-align: right; border-bottom: 3px solid #000; padding-bottom: 10px;"></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="20">
    <tr>
        <td style="width: 50%;"><h2>Dodavatel</h2>
            <p><strong>Jméno:</strong> ' . esc_html($faktury_jmeno) . '</p>
            <p><strong>Adresa:</strong> ' . esc_html($faktury_adresa) . '</p>
            <p><strong>IČO:</strong> ' . esc_html($faktury_ico) . '</p>';

// Přidání DIČ, pokud je dodavatel plátce DPH
if ($is_vat_payer && !empty($vat_id)) {
    $html .= '<p><strong>DIČ:</strong> ' . esc_html($vat_id) . '</p>';
}

$html .= '<p><strong>E-mail:</strong> ' . esc_html($faktury_email) . '</p>
            <p><strong>Web:</strong> ' . esc_html($faktury_web) . '</p>
        </td>
        <td style="width: 50%;"><h2>Odběratel</h2>';

// Přidání údajů odběratele
if (!empty($customer_data->first_name) || !empty($customer_data->surname)) {
    $html .= '<p><strong>Jméno:</strong> ' . esc_html($customer_data->first_name . ' ' . $customer_data->surname) . '</p>';
}
if (!empty($customer_data->email)) {
    $html .= '<p><strong>E-mail:</strong> ' . esc_html($customer_data->email) . '</p>';
}
if (!empty($customer_data->address)) {
    $html .= '<p><strong>Adresa:</strong> ' . esc_html($customer_data->address) . '</p>';
}
if (!empty($customer_data->company)) {
    $html .= '<p><strong>Firma:</strong> ' . esc_html($customer_data->company) . '</p>';
}
if (!empty($customer_data->ico)) {
    $html .= '<p><strong>IČO:</strong> ' . esc_html($customer_data->ico) . '</p>';
}
if (!empty($customer_data->dic)) {
    $html .= '<p><strong>DIČ:</strong> ' . esc_html($customer_data->dic) . '</p>';
}


$html .= '</td></tr></table>
<hr style="border: 1px solid #000; margin-top: 20px;">';

// Přidání tabulky s cenami
if ($is_vat_payer) {
    // Tabulka pro plátce DPH
    $html .= '
    <table border="0" cellspacing="10" cellpadding="5">
        <tr>
            <td style="width: 40%; font-weight: bold;">Popis</td>
            <td style="width: 20%; font-weight: bold; text-align: right;">Cena bez DPH</td>
            <td style="width: 20%; font-weight: bold; text-align: right;">Daň ' . ($vat_rate > 0 ? number_format($vat_rate, 0) . ' %' : '') . '</td>
            <td style="width: 20%; font-weight: bold; text-align: right;">Cena s DPH</td>
        </tr>
        <tr>
            <td>' . esc_html($customer_data->product_name) . '</td>
            <td style="text-align: right;">' . number_format($total_without_vat, 2, ',', ' ') . ' Kč</td>
            <td style="text-align: right;">' . number_format($vat_amount, 2, ',', ' ') . ' Kč</td>
            <td style="text-align: right;">' . number_format($total_with_vat, 2, ',', ' ') . ' Kč</td>
        </tr>
    </table>';
} else {
    // Tabulka pro neplátce DPH
    $html .= '
    <table border="0" cellspacing="10" cellpadding="5">
        <tr>
            <td style="width: 50%; font-weight: bold;">Popis</td>
            <td style="width: 50%; font-weight: bold; text-align: right;">Cena</td>
        </tr>
        <tr>
            <td>' . esc_html($customer_data->product_name) . '</td>
            <td style="text-align: right;">' . number_format($total_with_vat, 2, ',', ' ') . ' Kč</td>
        </tr>
    </table>';
}

$html .= '
<hr style="border: 1px solid #000; margin-top: 20px;">
<table border="0" cellspacing="0" cellpadding="5" style="margin-top: 50px;">
    <tr>
        <td style="width: 50%;"></td>
        <td style="width: 50%; text-align: right;">
            <p><strong style="font-size: 14pt;">Celkem: ' . number_format($total_with_vat, 2, ',', ' ') . ' Kč</strong></p>
            <p>Zaplaceno: ' . date('j. n. Y') . '</p>
        </td>
    </tr>
</table>';

// Vložení obsahu faktury
$pdf->writeHTML($html, true, false, true, false, '');

// Vložení podpisu nebo zástupného obrázku, pokud není podpis dostupné
$signature_path = !empty($faktury_podpis) ? convertToJpegWithout($faktury_podpis) : $placeholder_signature;
$pdf->Image($signature_path, 120, 240, 60, 0, 'JPEG', '', 'T', false, 300, '', false, false, 0, false, false, false);

        // Uložení faktury do souboru
        $invoices_dir = ABSPATH . 'invoices_me';
        if (!is_dir($invoices_dir)) {
            mkdir($invoices_dir, 0755, true);
        }

        $file_path = $invoices_dir . '/faktura_' . $invoice_number . '.pdf';
        $pdf->Output($file_path, 'F');





// Načtení product_name samostatně z databáze pro kontrolu, pokud není již v $customer_data
$product_name = $wpdb->get_var($wpdb->prepare("SELECT product_name FROM $table_name WHERE id = %d", $customer_data->id));


if (!$product_name) {
    error_log("Hodnota product_name v databázi je prázdná nebo nenalezena.");
} else {
    error_log("Hodnota product_name načtená z databáze: $product_name");
    $customer_data->product_name = $product_name; // Doplní hodnotu product_name do $customer_data
}

// Záznam hodnoty product_name, abychom ověřili, zda je správně nastavena
error_log("Hodnota product_name po načtení: " . (isset($customer_data->product_name) ? $customer_data->product_name : "není nastavena"));




$login_info = '';
if ($create_profile == 1) {
    $role_name = $customer_data->product_name; // Přesný název role (včetně velkých písmen)
    error_log("Přiřazuji uživatelskou roli založenou na názvu produktu: $role_name");

    // Pokud role neexistuje, vytvoří ji
    if (!get_role($role_name)) {
        add_role($role_name, $role_name, [
            'read' => true,
            'edit_posts' => false,
            'delete_posts' => false,
            'publish_posts' => false,
        ]);
        error_log("Role '$role_name' byla vytvořena.");
    } else {
        error_log("Role '$role_name' již existuje.");
    }

    // Načtení uživatele podle e-mailu
    $user = get_user_by('email', $customer_data->email);

    if ($user) {
        // Přidání role uživateli
        if (!in_array($role_name, $user->roles)) {
            $user->add_role($role_name);
            error_log("Role '$role_name' byla přidána uživateli s ID {$user->ID}.");
        } else {
            error_log("Uživatel s ID {$user->ID} již má roli '$role_name'.");
        }

        // Přihlašovací údaje pro existujícího uživatele
        $login_info = "<br><br><strong>Přihlašovací údaje:</strong><br>
        Uživatel: {$customer_data->email}<br>
        Heslo: vaše stávající heslo<br><br>
        <a href='" . esc_url(wp_login_url($customer_data->login_url)) . "' style='display: inline-block; padding: 10px 20px; margin-top: 20px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px;'>Přihlásit se</a>";
    } else {
        // Vytvoření nového uživatele
        $generated_password = 'anadfnd36';
        $userdata = [
            'user_login' => $customer_data->email,
            'user_email' => $customer_data->email,
            'role'       => $role_name,
            'user_pass'  => $generated_password,
        ];

        $user_id = wp_insert_user($userdata);

        if (!is_wp_error($user_id)) {
            error_log("Uživatel s ID $user_id byl úspěšně vytvořen s rolí: $role_name.");
            $login_info = "<br><br><strong>Přihlašovací údaje:</strong><br>
            Uživatel: {$customer_data->email}<br>
            Heslo: {$generated_password}<br><br>
            <a href='" . esc_url(wp_login_url($customer_data->login_url)) . "' style='display: inline-block; padding: 10px 20px; margin-top: 20px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px;'>Přihlásit se</a>";
        } else {
            $error_message = $user_id->get_error_message();
            error_log("Chyba při vytváření uživatele: $error_message");
        }
    }
}








   // Odeslání e-mailu s fakturou
    $mail = new PHPMailer(true);
    try {
        $mail->CharSet = 'UTF-8';
        $mail->isHTML(true);

        // Nastavení výchozí adresy, pokud není email_from definováno
        $default_email_from = 'info@platebniformular.cz';
        $email_from = !empty($customer_data->email_from) ? $customer_data->email_from : $default_email_from;
        $email_from_name = !empty($customer_data->email_from_name) ? $customer_data->email_from_name : $email_from;
        $mail->setFrom($email_from, $email_from_name);
        $mail->addAddress($customer_data->email);
        $mail->Subject = $customer_data->email_subject;
        $mail->Body = nl2br($customer_data->email_body) . $login_info;
        $mail->addAttachment($file_path);
        $mail->send();
        error_log("E-mail s fakturou a přihlašovacími údaji úspěšně odeslán na {$customer_data->email}.");

        // Odeslání e-mailu vlastníkovi webu
        if (!empty($owner_email = get_option('owner_email', ''))) {
            $mail->clearAddresses();
            $mail->addAddress($owner_email);
            $mail->Subject = 'Zaplaceno (' . $customer_data->amount . ' Kč)';
            $mail->Body = "Byla provedena platba. Podrobnosti platby:<br>- Částka: {$customer_data->amount} Kč<br>- Produkt: {$customer_data->product_name}<br>- Jméno: {$customer_data->first_name} {$customer_data->surname}<br>- E-mail zákazníka: {$customer_data->email}";
            $mail->send();
            error_log("Notifikační e-mail vlastníkovi webu úspěšně odeslán.");
        }

        // Přidání přihlašovacích údajů do těla e-mailu, pokud jsou k dispozici
        $email_body_with_login_info = $customer_data->email_body . $login_info;

        // Uložení informací o odeslaném e-mailu do tabulky
        global $wpdb;
        $wpdb->insert(
            $wpdb->prefix . 'zakaznici_email_log',
            array(
                'email_subject' => $customer_data->email_subject,
                'email_body' => $email_body_with_login_info,
                'email_address' => $customer_data->email,
                'sent_at' => current_time('mysql')
            ),
            array('%s', '%s', '%s', '%s')
        );

    } catch (Exception $e) {
        error_log("Chyba při odesílání e-mailu: {$mail->ErrorInfo}");
    }



 $update_result = $wpdb->update(
    $table_name,
    array(
        'payment_status' => 'paid',
        'payment_method' => 'fio_transfer',
        'api_url' => 'https://platebniformular.cz/'
    ),
    array('id' => (int)$customer_data->id),
    array('%s', '%s', '%s'),
    array('%d')
);

// ✅ META CAPI Purchase (FIO) – po úspěšném označení paid
if ($update_result !== false) {
    $event_id = 'fio_' . (int)$customer_data->id; // stabilní id, žádné zdvojování
    send_meta_purchase_min($customer_data, $event_id);
}





 $global_index++;
                



}
            } else {
                echo "Chyba: Zákaznická data pro ID " . $customer_id . " nebyla nalezena.<br><br>";
            }
        }
    }
}
?>
