<?php

// Module distributed under the terms of the GPL v3
// (c) 2025 Toutatis - https://totatus.com
// Jonathan Delincé - info@totatus.com

class Actionsmyexportmod
{
    /**
     * Injecter le bouton
     */
    public function formObjectOptions($parameters, &$object, &$action, $hookmanager)
    {
        if (strpos($parameters['context'], 'ordercard') !== false)
        {
            global $langs;
            $langs->load("myexportmod@myexportmod");

            // On ajoute un bouton qui recharge la page avec action=exportCsv
            ?>
            <script type="text/javascript">
            jQuery(document).ready(function(){
                jQuery("div.tabsAction").append(
                    '<a class="butAction" href="<?php echo $_SERVER["PHP_SELF"]; ?>?id=<?php echo $object->id; ?>&action=exportCsv"><?php echo $langs->trans("ExportCsvButton")?></a>'
                );
            });
            </script>
            <?php
        }
    }

    /**
     * Faire l'export quand action=exportCsv
     */
    public function doActions($parameters, &$object, &$action, $hookmanager)
    {
        if ($action == 'exportCsv' && !empty($object->id))
        {
            global $db, $langs;

            // Charger la classe commande
            require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
            // Charger la classe produit (pour récupérer EAN)
            require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';

            $commande = new Commande($db);
            if ($commande->fetch($object->id) > 0)
            {
                // Si nécessaire, on peut forcer le chargement du tiers et des lignes
                $commande->fetch_thirdparty();
                // Dans certaines versions, fetch() charge déjà les lignes ;
                // sinon, on appelle :
                // $commande->fetch_lines();

                // Préparation des en-têtes HTTP pour l'export CSV
                header('Content-Type: text/csv; charset=UTF-8');
                header('Content-Disposition: attachment; filename="commande_'.$commande->ref.'.csv"');

                // Ouvrir un flux "php://output" pour l'écriture CSV
                $out = fopen('php://output', 'w');

                // Petite ligne d'en-tête générale
                fputcsv($out, array('Commande', $commande->ref));
                fputcsv($out, array('Client', $commande->thirdparty->name));
                fputcsv($out, array('Date', dol_print_date($commande->date_commande, 'day')));

                // Saut de ligne "visuel" dans le CSV
                fputcsv($out, array(''));

                // Entête pour les lignes de commande
                fputcsv($out, array('Produit (Ref)', 'EAN', 'Quantité', 'PU HT', 'Total HT'));

                // Boucle sur les lignes de la commande
                foreach ($commande->lines as $line)
                {
                    // On va chercher les infos du produit si besoin
                    // (Notamment pour l'EAN, qui se trouve dans $prod->barcode)
                    $product_ref = $line->product_ref;   // Déjà récupéré par Dolibarr
                    $ean = '';                           // Par défaut, vide

                    if (!empty($line->fk_product))
                    {
                        $prod = new Product($db);
                        if ($prod->fetch($line->fk_product) > 0)
                        {
                            // Récupérer la référence et l'EAN
                            $product_ref = $prod->ref;
                            $ean         = $prod->barcode;  // ou $prod->barcode_ean ?
                        }
                    }

                    // On écrit la ligne CSV
                    fputcsv($out, array(
                        $product_ref,            // Référence produit
                        $ean,                    // Code EAN
                        $line->qty,             // Quantité
                        price($line->subprice), // Prix unitaire HT
                        price($line->total_ht)  // Total HT
                    ));
                }

                // Fermer le flux
                fclose($out);

                // Stopper l'exécution ici (sinon Dolibarr va continuer à afficher la page)
                exit;
            }
        }
    }
}
