<?php
namespace Modules\Administration\Controller;

use Helpers\ChampsSupplementaire\ChampSupp;
use Helpers\Outil\Date;
use Modules\Administration\Repository\UtilisateurRepo;
use Skeleton\Controller\Controller;
use TwigExtension\OutilExtension;

class ExportUtilisateurController extends Controller
{
    public function getRepo() :UtilisateurRepo
    {
        return new UtilisateurRepo($this->pdo);
    }

    public function exportAction() :string
    {
        $post = $this->request->getParsedBody();
        $trad = $this->getTranslationService();


        $mapCsField = (new ChampSupp($this->pdo))->getSchema('HASTUTIL');
        $this->getEmailCsvService()->sendCsv(
            'export_utilisateur',
            $this->getRepo()->exportListCollab(
                $_SESSION['Session_Login'],
                $post,
                array_merge(
                    array_map(function ($field) {
                        return 'HASTUTIL.' . $field;
                    }, [

                        'CODE',
                        'NOM',
                        'CODE_STE',
                        //__________

                        'TEL',
                        'GSM',
                        'FAX',
                        'EMAIL',

                        //______

                        'SUPHIER',
                        'CODE_UO',
                        'FONCTION',

                        'SI',
                        'CDC',
                        'SCA',

                        'CTR_ADR',
                        'CTRLIV',
                    ]),
                    [
                        'Societe_RAIS_SOC' => 'SOCIETE.RAIS_SOC',
                    ],
                    array_map(function ($csFieldSchema) {
                        return 'HASTUTIL.CS_DON.' . $csFieldSchema['NUM_FIX'];
                    }, $mapCsField)
                )
            ),
            function (array $row) use ($mapCsField, $trad) {
                return array_merge(
                    [
                        $row['CODE'],
                        $row['NOM'],
                        OutilExtension::entityLabel($row, 'CODE_STE', 'Societe_RAIS_SOC'),

                        //__________

                        $row['TEL'],
                        $row['GSM'],
                        $row['FAX'],
                        $row['EMAIL'],

                        //______

                        $row['SUPHIER'],
                        $row['CODE_UO'],
                        $row['FONCTION'],

                        $row['SI'],
                        $row['CDC'],
                        $row['SCA'],

                        $row['CTR_ADR'],
                        $row['CTRLIV'],
                    ],
                    // Field CS
                    array_map(function ($csFieldSchema) use ($row, $trad) {
                        return ChampSupp::formatValue(
                            $csFieldSchema['TYPE'],
                            $row['HASTUTIL.CS_DON.' . $csFieldSchema['NUM_FIX'] ],
                            $trad
                        );
                    }, $mapCsField)
                );
            },
            array_merge(
                [
                    $trad->t('Code'),
                    $trad->t('Nom'),
                    $trad->t('Société'),

                    //_______

                    $trad->t('Téléphone fixe'),
                    $trad->t('Téléphone mobile'),
                    $trad->t('Fax'),
                    $trad->t('E-mail'),

                    //______
                    
                    $trad->t('Supérieur Hiérarchique'),
                    $trad->t('Unité Organisationnelle'),
                    $trad->t('Fonction'),

                    $trad->t('Section d’imputation'),
                    $trad->t('Code complémentaire'),
                    $trad->t('Sous-compte d’analyse'),

                    $trad->t('Centre émetteur'),
                    $trad->t('Centre de livraison'),
                ],
                // Field CS
                array_map(function ($csFieldSchema) {
                    return $csFieldSchema['NOM'];
                }, $mapCsField)
            )
        );
        return 'ok';
    }
}
