<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * @return void
 */
function elementsell_billing_maybe_send_card_required_email() {
    if ( ! elementsell_is_billing_blocked() ) {
        return;
    }

    if ( ! function_exists( 'elementsell_send_email' ) || ! function_exists( 'elementsell_email_template' ) ) {
        if ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
            ElementSell_Cron_Log::add( 'Mail o kartě: nelze odeslat' );
        }
        return;
    }

    $to = sanitize_email( (string) get_option( 'admin_email' ) );

    if ( $to === '' || ! is_email( $to ) ) {
        if ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
            ElementSell_Cron_Log::add( 'Mail o kartě: nelze odeslat' );
        }
        return;
    }

    $sent_count = max( 0, (int) get_option( 'elementsell_billing_card_email_count', 0 ) );
    $last_sent  = (int) get_option( 'elementsell_billing_card_email_last_sent', 0 );
    $now        = time();

    if ( $sent_count >= 3 ) {
        if ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
            ElementSell_Cron_Log::add( 'Mail o kartě: limit 3 e-mailů vyčerpán' );
        }
        return;
    }

    if ( $sent_count > 0 && ( $now - $last_sent ) < ( 7 * DAY_IN_SECONDS ) ) {
        if ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
            ElementSell_Cron_Log::add( 'Mail o kartě: čeká se na další termín' );
        }
        return;
    }

    $site_name = get_bloginfo( 'name' );
    $site_url  = home_url( '/' );
    $admin_url = elementsell_get_billing_admin_url();
    $sales     = elementsell_billing_get_required_sales_count();

    $subject = sprintf(
        'ElementSell — uložení platební karty na webu %s',
        $site_name !== '' ? $site_name : wp_parse_url( $site_url, PHP_URL_HOST )
    );

    $body  = '<p>Dobrý den,</p>';
    $body .= '<p>na webu <strong>' . esc_html( $site_name ) . '</strong> ';
    $body .= '(<a href="' . esc_url( $site_url ) . '">' . esc_html( $site_url ) . '</a>) ';
    $body .= 'jste dosáhli ' . esc_html( (string) $sales ) . ' prodejů přes plugin ElementSell.</p>';
    $body .= '<p>Pro pokračování v práci s administrací ElementSell je potřeba <strong>jednou uložit platební kartu</strong> ve WordPressu. ';
    $body .= 'Slouží jen k měsíčnímu poplatku za ElementSell (1&nbsp;% z tržeb).</p>';
    $body .= '<p style="margin:24px 0;"><a href="' . esc_url( $admin_url ) . '" style="display:inline-block;padding:12px 20px;background:#2271b1;color:#ffffff;text-decoration:none;border-radius:8px;font-weight:700;">Otevřít nastavení ElementSell</a></p>';
    $body .= '<p>Platby zákazníků na webu zatím fungují. V administraci ElementSell uvidíte do uložení karty jen tuto obrazovku.</p>';
    $body .= '<p><strong>Bezpečnost:</strong> Tento e-mail vás nikdy nepožádá o zadání čísla karty. Kartu zadáváte jen po přihlášení do svého WordPressu na adrese vašeho webu.</p>';
    $body .= '<p>Dotazy: <a href="mailto:' . esc_attr( elementsell_get_support_email() ) . '">' . esc_html( elementsell_get_support_email() ) . '</a><br>';
    $body .= '<a href="' . esc_url( elementsell_get_brand_url() ) . '">elementsell.cz</a></p>';

    $html = elementsell_email_template( esc_html( $subject ), $body );

    $sent = elementsell_send_email(
        $to,
        $subject,
        $html,
        [],
        [],
        'ElementSell',
        elementsell_get_support_email()
    );

    if ( $sent ) {
        update_option( 'elementsell_billing_card_email_count', $sent_count + 1 );
        update_option( 'elementsell_billing_card_email_last_sent', $now );

        if ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
            ElementSell_Cron_Log::add( 'Mail o kartě odeslán' );
        } elseif ( function_exists( 'elementsell_ops_log_write_quick' ) ) {
            elementsell_ops_log_write_quick( 'o', 'Mail o kartě odeslán' );
        }
    } elseif ( class_exists( 'ElementSell_Cron_Log' ) && ElementSell_Cron_Log::is_active() ) {
        ElementSell_Cron_Log::add( 'Mail o kartě se nepodařilo odeslat' );
    }
}

add_action( 'elementsell_daily_billing_check', 'elementsell_billing_maybe_send_card_required_email', 25 );
add_action( 'elementsell_order_paid', 'elementsell_billing_maybe_send_card_required_email', 30 );
