<?php
/**
 * mma-export-process-invoices.php
 *
 * Endpoint d'export et de fusion des factures WooCommerce.
 * Genere 1 fichier PDF avec toutes les factures en cours de traitement,
 * le pousse en FTP sur Biotula.
 *
 * Necessite :
 *   - le plugin woocommerce_pdf_invoices (fournit TCPDF)
 *   - la lib FPDF (theme child : includes/fpdf_merge.php) pour la fusion
 *
 * Secrets externalises dans ~db/config.local.php.
 */

// -----------------------------------------------------------------------------
// Chargement des secrets — AVANT tout le reste, pour pouvoir rejeter
// immediatement une requete sans code valide (sans bootstraper WP)
// -----------------------------------------------------------------------------

$baseDir = substr(__DIR__, 0, strpos(__DIR__, '/', 20));
require_once "$baseDir/db/config.local.php";

if (!isset($_GET['code']) || $_GET['code'] != MMA_AUTH_CODE) {
    echo "ERROR CODE";
    exit;
}

// -----------------------------------------------------------------------------
// Bootstrap WordPress
// -----------------------------------------------------------------------------

if (!defined('ABSPATH')) {
    require_once('wp-load.php');
}

// -----------------------------------------------------------------------------
// Helpers
// -----------------------------------------------------------------------------

function deleteFiles($location) {
    // Supprime tous les .pdf du dossier courant
    $filesToDeleted = glob($location . '/*.pdf');
    foreach ($filesToDeleted as $fileToDelete) {
        if (is_file($fileToDelete)) {
            unlink($fileToDelete);
        }
    }
}

// -----------------------------------------------------------------------------
// Preparation du dossier de sortie
// -----------------------------------------------------------------------------

$upload_dir = wp_upload_dir();
$location = $upload_dir['basedir'] . '/' . 'woocommerce_pdf_invoices' . '/current';
if (!file_exists($location)) {
    mkdir($location, 0755, true);
}

deleteFiles($location);

// -----------------------------------------------------------------------------
// Calcul de la fenetre temporelle (mode "va=ok" : blocage export pour MCO)
// -----------------------------------------------------------------------------

if (isset($_GET['va']) && $_GET['va'] == "ok") {
    $date   = new DateTime('now', new DateTimeZone('Europe/Paris'));
    $date19 = new DateTime();
    $date19->setTime(19, 0, 0);

    $avant19 = $date < $date19;

    $d         = date('Y-m-d H:i:s');
    $dayofweek = date('w', strtotime($d));

    switch ($dayofweek) {
        case 0: $delta = 2;                break;  // dimanche
        case 1: $delta = $avant19 ? 3 : 0; break;  // lundi
        case 6: $delta = 1;                break;  // samedi
        default: $delta = $avant19 ? 1 : 0;
    }

    $date->setTime(9, 0, 0);
    $to = date('Y-m-d H:i:s', strtotime("- $delta day", strtotime(date_format($date, 'Y-m-d H:i:s'))));
} else {
    $to = "2030-12-31";
}

// -----------------------------------------------------------------------------
// Recuperation des commandes a facturer
// -----------------------------------------------------------------------------

global $wpdb;
$rows = $wpdb->get_results("
    SELECT p.ID as order_id
    FROM " . $wpdb->prefix . "posts p
    WHERE 1=1
        AND post_type   = 'shop_order'
        AND post_status = 'wc-processing'
        AND post_date BETWEEN '2015-01-01' AND '$to'
    ORDER BY ID
");

if ($wpdb->num_rows > 0) {

    // -------------------------------------------------------------------------
    // Generation d'un PDF par facture
    // -------------------------------------------------------------------------

    foreach ($rows as $row) {

        $order_id = $row->order_id;
        $pdf      = new WooPDF();

        $order = new WC_Order($order_id);
        if (!$order) {
            return;
        }

        if (!apply_filters('woo_pdf_generate_regular_invoice', true, $order)) {
            return;
        }

        $pdf->settings = array();
        $pdf->opt      = $pdf->get_options();

        if (!$pdf->opt['woo_pdf_enabled']) {
            return;
        }

        if (!$pdf->image_library_exists()) {
            return;
        }

        // Chargement TCPDF + WooPdfInvoice (ancien et nouveau emplacement)
        if (!class_exists('TCPDF') && file_exists(WOOPDF_PLUGIN_PATH . 'libraries/tcpdf/tcpdf.php')) {
            require_once WOOPDF_PLUGIN_PATH . 'libraries/tcpdf/tcpdf.php';
        }
        if (!class_exists('WooPdfInvoice') && file_exists(WOOPDF_PLUGIN_PATH . 'classes/woo-pdf-invoice.class.php')) {
            require_once WOOPDF_PLUGIN_PATH . 'classes/woo-pdf-invoice.class.php';
        }
        if (!class_exists('TCPDF') && file_exists(WOOPDF_PLUGIN_PATH . '/includes/tcpdf/tcpdf.php')) {
            require_once WOOPDF_PLUGIN_PATH . '/includes/tcpdf/tcpdf.php';
        }
        if (!class_exists('WooPdfInvoice') && file_exists(WOOPDF_PLUGIN_PATH . '/includes/woo-pdf-invoice.class.php')) {
            require_once WOOPDF_PLUGIN_PATH . '/includes/woo-pdf-invoice.class.php';
        }

        // Numero de facture
        if ($pdf->opt['woo_pdf_numbering_method'] == 0) {
            $next_invoice_number = $pdf->get_next_invoice_number();
        } else if ($pdf->opt['woo_pdf_numbering_method'] == 1) {
            $next_invoice_number = $order->get_order_number();
            $next_invoice_number = preg_replace('/[^0-9.]+/', '', $next_invoice_number);
        } else {
            $next_invoice_number = $order->get_order_number();
        }

        $random_name = substr(md5(time()), 0, 5) . substr($next_invoice_number, -3, 3);
        $file_name   = $order_id . '.pdf';

        if ($pdf->opt['woo_pdf_numbering_method'] == 2) {
            $invoice_number_prefix = '';
            $invoice_number_suffix = '';
        } else {
            $invoice_number_prefix = $pdf->replace_prefix_suffix_macros($pdf->opt['woo_pdf_number_prefix'], $order, 'prefix');
            $invoice_number_suffix = $pdf->replace_prefix_suffix_macros($pdf->opt['woo_pdf_number_suffix'], $order, 'suffix');
        }

        $info = array(
            'id'     => $next_invoice_number,
            'code'   => $random_name,
            'prefix' => $invoice_number_prefix,
            'suffix' => $invoice_number_suffix,
        );

        $pdf = new WooPdfInvoice(
            array('order' => $order, 'options' => $pdf->opt, 'info' => $info, 'type' => 'invoice'),
            'P', 'pt', 'A4'
        );
        $pdf->CreateInvoice();

        // Protection du dossier contre le listing
        if (!file_exists($location . '/index.php')) {
            touch($location . '/index.php');
        }

        $filelocation = $location . '/' . $file_name;
        $pdf->Output($filelocation, 'F');
    }

    // -------------------------------------------------------------------------
    // Fusion de tous les PDFs en un seul
    // -------------------------------------------------------------------------

    require_once get_stylesheet_directory() . "/includes/fpdf_merge.php";
    $merge          = new FPDF_Merge();
    $filesToMerged  = glob($location . '/*.pdf');

    foreach ($filesToMerged as $key => $fileToMerged) {
        if (is_file($fileToMerged) && substr($fileToMerged, -3) != 'php') {
            $merge->add($fileToMerged);
        }
    }

    $destination_folder = $location;
    $output             = $destination_folder . '/' . $wpdb->prefix . 'export-invoice-process.pdf';
    $merge->output($output);

    // -------------------------------------------------------------------------
    // Envoi FTP vers Biotula
    // -------------------------------------------------------------------------

    $ftp_server    = MMA_BIOTULA_FTP_HOST;
    $ftp_user_name = MMA_BIOTULA_FTP_USER;
    $ftp_user_pass = MMA_BIOTULA_FTP_PASS;

    $remote_file = 'web/tools/wp-content/uploads/invoices/processing-invoices' . date("Y-m-d-H-i-s") . '.pdf';

    $conn_id     = ftp_connect($ftp_server);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

    if (ftp_put($conn_id, $remote_file, $output, FTP_BINARY)) {
        echo "OK";
        deleteFiles($location);
    } else {
        echo "Il y a eu un probleme lors du chargement du fichier $output\n";
    }
    ftp_close($conn_id);

} else {
    echo "NO ORDERS";
}