<?php
namespace Traits\ExportTo;

use Helpers\Fichier\Fichier;
use Helpers\Log\LogSysteme;

trait Excel
{
    // phpcs:ignore
    public function convert_to_excel($input_array, $output_file_name, $keyColonne = [], $noKeyColonne = false, bool $timestamp = true)
    {

        
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->getProperties()->setTitle("export")->setDescription("none");
        
        $objPHPExcel->setActiveSheetIndex(0);
        // Récupération des noms de champs dans un tableau
        
        if (!$noKeyColonne) {
            if ($keyColonne) {
                $keys = $keyColonne;
            } else {
                if (count($input_array) > 0) {
                    $keys=array_keys($input_array[0]);
                } else {
                    $keys = [];
                }
            }
            // Insertion de la ligne d'entête du tableau
            $col = 0;
            foreach ($keys as &$key) {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, 1, $key);
                $col++;
            }
            $row = 2;
        } else {
            $row = 1;
        }
        
        // Insertion des Datas
      
        foreach ($input_array as &$data) {
            $col = 0;
            foreach ($data as &$field) {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, trim($field));
                $col++;
            }
            $row++;
        }
        
        $objPHPExcel->setActiveSheetIndex(0);

        $timerCreationFichier = "_".date('Ymd')."_".date('His');

        $nomFichier = $_SESSION['NomFichier'] = LogSysteme::getServerName().'.'.$output_file_name.(($timestamp)?$timerCreationFichier:'').'.xlsx';
        
        // @phpstan-ignore-next-line
        $this->urlExcel = Fichier::URLDownload($nomFichier);
        
        //         header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        //         header('Content-Disposition: attachment;filename="'.$nomFichier.'"');
        //         header('Cache-Control: max-age=0');
        
        // La ligne ci-dessous permet de résoudre le problème "Uncaught PHPExcel_Writer_Exception: Could not close zip file"
//        \PHPExcel_Settings::setZipClass(\PHPExcel_Settings::PCLZIP);

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save($this->urlExcel);
      
        return $nomFichier;
    }
}
