<?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í potřebných tříd
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Připojení k databázi WordPress
global $wpdb;
if (!isset($wpdb)) {
    exit("Chyba: Nelze připojit k databázi.");
}

$table_name = $wpdb->prefix . 'zakaznici'; // Název tabulky zákazníků


//Dotaz na platby, které nejsou zaplaceny, reminder_sent je 0 a jsou starší než 3 dny
//$results = $wpdb->get_results("
//    SELECT uid, email, reminder_subject, reminder_body, email_from 
//    FROM $table_name
//    WHERE payment_status != 'paid' 
//    AND reminder_sent = 0
//    AND TIMESTAMPDIFF(DAY, date, NOW()) > 3
//");



// Dotaz na platby, které nejsou zaplaceny, reminder_sent je 0 a jsou starší než 3 dny
$results = $wpdb->get_results("
    SELECT id, uid, email, reminder_subject, reminder_body, email_from, date
    FROM $table_name
    WHERE payment_status != 'paid' 
    AND reminder_sent = 0
    AND TIMESTAMPDIFF(DAY, date, NOW()) > 3
");

// Zpracování výsledků pro odstranění duplicitních e-mailů a kontrolu stavu "paid" v předchozích 10 dnech
$processed_emails = [];
$filtered_results = [];

foreach ($results as $record) {
    // Kontrola, zda tento zákazník (e-mail) má v posledních 10 dnech záznam s "paid"
    $paid_check = $wpdb->get_var($wpdb->prepare("
        SELECT COUNT(*)
        FROM $table_name
        WHERE email = %s
        AND payment_status = 'paid'
        AND TIMESTAMPDIFF(DAY, date, NOW()) <= 10
    ", $record->email));

    if ($paid_check > 0) {
        // Pokud má "paid" záznamy, označíme tento "unpaid" záznam jako reminder_sent = 1
        $wpdb->update(
            $table_name,
            ['reminder_sent' => 1],
            ['id' => $record->id],
            ['%d'],
            ['%d']
        );

        // Logovat, že záznam byl přepsán na reminder_sent = 1
        error_log("UID: " . $record->uid . " pro e-mail: " . $record->email . " přepsán na reminder_sent = 1 (má recentní paid).");
    } else {
        // Pokud nemá "paid" záznamy, přidáme tento záznam do výsledků
        if (!in_array($record->email, $processed_emails)) {
            $filtered_results[] = $record;
            $processed_emails[] = $record->email;
        } else {
            // Pokud e-mail už byl zpracován, nastavíme reminder_sent = 1
            $wpdb->update(
                $table_name,
                ['reminder_sent' => 1],
                ['id' => $record->id],
                ['%d'],
                ['%d']
            );

            // Logovat, že záznam byl přepsán na reminder_sent = 1
            error_log("UID: " . $record->uid . " pro e-mail: " . $record->email . " přepsán na reminder_sent = 1.");
        }
    }
}

// Přepsání $results pouze s jedinečnými záznamy
$results = $filtered_results;






// Výpis záznamů a odeslání upomínkových emailů
if (!empty($results)) {
    foreach ($results as $row) {
        // Výpis UID pro každý záznam, kterému bude e-mail odeslán
        echo "Odesílám e-mail pro UID: " . $row->uid . "<br>";
        
        // Odeslání upomínkového emailu
       // send_reminder_email($row);
    }
} else {
    echo "Žádné nedokončené platby starší než 3 dny nebyly nalezeny.";
}



 // Definice funkce pro odesílání upomínkového emailu a ukládání do databáze
function send_reminder_email($customer_data) {
    global $wpdb;

    // Načtení údajů z tabulky
    $to = $customer_data->email;
    $subject = $customer_data->reminder_subject;
    $body = nl2br($customer_data->reminder_body);


    // Nastavení výchozí adresy a jména, pokud nejsou definována
    $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;

    // Odesílání e-mailu pomocí PHPMailer
    $mail = new PHPMailer(true);

    try {

    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'noreply.platby@gmail.com'; 
    $mail->Password = 'cimjkhsbhnvnscww'; 
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port = 587;

        // Nastavení emailu
        $mail->CharSet = 'UTF-8'; // Nastavení kódování na UTF-8
        $mail->isHTML(true); // Použití HTML formátu

$faktury_email = get_option('faktury_email', '');
// Zkontrolovat, zda je email platný
if (!empty($faktury_email) && filter_var($faktury_email, FILTER_VALIDATE_EMAIL)) {
    // Nastavit Reply-To pouze pokud je e-mail validní
    $mail->addReplyTo($faktury_email, $email_from_name);
} else {
    // Pokud není validní, Reply-To se nenastaví
    error_log("Reply-To se nenastavuje, protože 'faktury_email' je prázdný nebo neplatný.");
}
        $mail->setFrom($email_from, $email_from_name);
        $mail->addAddress($to); // Příjemce
        $mail->Subject = $subject;
        $mail->Body = $body;

        // Odeslání e-mailu
        $mail->send();
        echo "Upomínkový e-mail úspěšně odeslán na $to.<br>";


        // Uložení informací o odeslaném e-mailu do tabulky zakaznici_email_log
        $wpdb->insert(
            $wpdb->prefix . 'zakaznici_email_log', // Tabulka pro logování e-mailů
            array(
                'email_subject' => $subject,
                'email_body'    => $body,
                'email_address' => $to,
                'sent_at'       => current_time('mysql')
            ),
            array('%s', '%s', '%s', '%s')
        );

        // Aktualizace záznamu v tabulce zakaznici, nastavení reminder_sent na 1
        $wpdb->update(
            $wpdb->prefix . 'zakaznici', 
            array('reminder_sent' => 1), 
            array('uid' => $customer_data->uid), 
            array('%d'), 
            array('%s')
        );

    } catch (Exception $e) {
        error_log("Chyba při odesílání upomínky: {$mail->ErrorInfo}");
        echo "Chyba při odesílání upomínky na $to.<br>";
    }
}

?>
