<?php

namespace Modules\Fournisseur\Controller;

use Skeleton\Controller\Controller;
use Helpers\Ariane\Ariane;
use Modules\Fournisseur\Repository\Indicateur;
use Helpers\Highcharts\Highcharts;
use Helpers\Trad\Trad;

class IndicateurFournisseurController extends Controller
{


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

        $trad = $this->getTranslationService();

        $indicateur = new Indicateur($this->pdo);
        $periodes = $indicateur->periodedispo();

        if (!isset($_SESSION['DEVISE_BASE'])) {
            $_SESSION['DEVISE_BASE']  = \unserialize($_SESSION['OxaParams'])['DEVISE_BASE'];
        }

        /* highcharts 1 */
        $nbrFournissActif = $indicateur->nbrFournissActif();

        $array1['titre'] = $trad->t('Nombre de fournisseurs actifs') . ' - ' . ($post['annee'] ?? date('Y'));
        $array1['Fourchette'] = [0, $nbrFournissActif[1]['value']];
        $array1['value'] = $nbrFournissActif[0]['value'];
        $array1['legend'] = $trad->t('Fournisseurs');
        $array1['type'] = 'solidgauge';

        $highcharts1 = Highcharts::generate($array1, $this->pdo, $trad);

        /* highcharts 2 */
        $nbrFournissParPeriode = $indicateur->nbrFournissParPeriode($post['annee'] ?? date('Y'));

        $array2['titre'] = $trad->t('Nombre de fournisseurs utilisés') . ' - ' . ($post['annee'] ?? date('Y'));
        $array2['Fourchette'] = [0, $nbrFournissParPeriode[1]['value']];
        $array2['value'] = $nbrFournissParPeriode[0]['value'];
        $array2['legend'] = $trad->t('Fournisseurs');
        $array2['type'] = 'solidgauge';

        $highcharts2 = Highcharts::generate($array2, $this->pdo, $trad);

        /* indicateur */
        $totalCA = $indicateur->totalCAFourPeriode($post['annee'] ?? date('Y'));
        $moyenCA = $indicateur->moyenCAFourPeriode($post['annee'] ?? date('Y'));

        /* highcharts 3 */
        $graphIncident = $indicateur->nbrIncidentFou($post['annee'] ?? date('Y'));

        $array3['value']                  = $graphIncident;
        $array3['categorie']              = 'mois';
        $array3['titre']                  = $trad->t("Nombre incidents") . ' - ' . ($post['annee'] ?? date('Y'));
        $array3['type']                   = 'area';
        $array3['detailColone']['NOMBRE_INCIDENT'] = ['nom' => $trad->t("Nbr d'incidents"), 'axeLier' => 'gauche'];
        $array3['legendGraph'][]          = ['texte' => $trad->t("Nbr d\'incidents"), 'format' => '', 'axe' => 'gauche'];
        $array3['path']                   = $this->router->generateUri('GlobalApplication.Incidents.incidents', ['MODULE' => 'MultiFournisseur', 'id' => 'ALL']);
        $array3['pathPost']               = "{'BETWEEN_DTE_OCCUR' : '" . ($post['annee'] ?? date('Y')) . "'}";

        $highcharts3 = Highcharts::generate($array3, $this->pdo, $trad);

        /* highcharts 4 */
        $graphPalmares = $indicateur->palmaresFou($post['annee'] ?? date('Y'));

        $categorieArray4 = [];
        foreach ($graphPalmares as $val) {
            $categorieArray4[] = $val['CODE_FOU'] . ' - ' . addslashes($val['RS']);
        }

        $array4['value']                  = $graphPalmares;
        $array4['titre']                  = $trad->t("Palmarès des fournisseurs") . ' - ' . ($post['annee'] ?? date('Y'));
        $array4['type']                   = 'column';
        $array4['categorie']              = $categorieArray4;
        $array4['detailColone']['NBRE_COMMANDE'] = ['nom' => $trad->t('Nombre de commandes'), 'type' => 'spline', 'axeLier' => 'gauche', 'index' => 2];
        $array4['detailColone']['MONTANT'] = ['nom' => $trad->t('Montant'), 'axeLier' => 'droit'];
        $array4['legendGraph'][]          = ['texte' => $trad->t("Nbr de commandes"), 'format' => '', 'axe' => 'gauche'];
        $array4['legendGraph'][]          = ['texte' => $trad->t('Montant'), 'format' => ' ' . $_SESSION['DEVISE_BASE'], 'axe' => 'droit'];

        $highcharts4 = Highcharts::generate($array4, $this->pdo, $trad);


        $listeParentaire = $indicateur->listePartenaire();

        Ariane::generate(0, $trad->t('Analyse'), $post);

        return $this->renderer->render('@Fournisseur/Indicateur/indicateur', [
            'menuActive' => 'Fournisseur',
            'periodes' => $periodes,
            'dataHighchart1' => $highcharts1,
            'dataHighchart2' => $highcharts2,
            'dataHighchart3' => $highcharts3,
            'dataHighchart4' => $highcharts4,
            'annee' => $post['annee'] ?? date('Y'),
            'totalCA' => $totalCA,
            'moyenCA' => $moyenCA,
            'devise' => $_SESSION['DEVISE_BASE'],
            'listePartenaire' => $listeParentaire,
        ]);
    }

    public function documentsAction(): string
    {
        $trad = $this->getTranslationService();

        $indicateur = new Indicateur($this->pdo);
        //$nombreFrs = $indicateur->nbrFrs();

        /** HC 1 **/
        $nombreTotal = $indicateur->nbrDocTotal()['NB_DOC'];
        $nombreDocActif = $indicateur->nbrDocValide();

        $tableauHC1 = [
            'A_JOUR' => $nombreDocActif['NB_DOC'],
            'ABSENT' => $nombreTotal - ($nombreDocActif['NB_DOC'] == '' ? 0 : $nombreDocActif['NB_DOC']),
        ];

        $array1['titre'] = $trad->t('Nombre de documents à jour');
        $array1['Fourchette'] = [0, $nombreTotal];
        $array1['value'] = $nombreDocActif['NB_DOC'];
        $array1['legend'] = $trad->t('Documents à jour');
        $array1['type'] = 'solidgauge';

        $highcharts1 = Highcharts::generate($array1, $this->pdo, $trad);

        /** HC2 **/
        $nombreTotalCritique =  $indicateur->nbrDocTotal(true)['NB_DOC'];
        $nombreDocActifCritque = $indicateur->nbrDocValide(true);

        $tableauHC2 = [
            'A_JOUR' => $nombreDocActifCritque['NB_DOC'],
            'ABSENT' => $nombreTotalCritique - ($nombreDocActifCritque['NB_DOC'] == '' ? 0 : $nombreDocActifCritque['NB_DOC']),
        ];

        $array2['titre'] = $trad->t('Nombre de documents critiques à jour');
        $array2['Fourchette'] = [0, $nombreTotalCritique];
        $array2['value'] = $nombreDocActifCritque['NB_DOC'];
        $array2['legend'] = $trad->t('Documents critiques à jour');
        $array2['type'] = 'solidgauge';

        $highcharts2 = Highcharts::generate($array2, $this->pdo, $trad);

        /** HC3 **/
        $nombreTotalSurv = $indicateur->nbrDocTotal(false, true)['NB_DOC'];
        $nombreDocActifSurv = $indicateur->nbrDocValide(false, true);

        $tableauHC3 = [
            'A_JOUR' => $nombreDocActifSurv['NB_DOC'],
            'ABSENT' => $nombreTotalSurv - ($nombreDocActifSurv['NB_DOC'] == '' ? 0 : $nombreDocActifSurv['NB_DOC']),
        ];

        $array3['titre'] = $trad->t('Nombre de documents en surveillance');
        $array3['Fourchette'] = [0, $nombreTotalSurv];
        $array3['value'] = $nombreDocActifSurv['NB_DOC'];
        $array3['legend'] = $trad->t('Documents en surveillance');
        $array3['type'] = 'solidgauge';

        $highcharts3 = Highcharts::generate($array3, $this->pdo, $trad);

        $listeParentaire = $indicateur->listePartenaire();

        return $this->renderer->render('@Fournisseur/Indicateur/documents', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'Fournisseur.Incidateur.indicateur',
            'dataHighchart1' => $highcharts1,
            'dataHighchart2' => $highcharts2,
            'dataHighchart3' => $highcharts3,

            'tableauHC1' => $tableauHC1,
            'tableauHC2' => $tableauHC2,
            'tableauHC3' => $tableauHC3,

            'listePartenaire' => $listeParentaire,
            ]);
    }

    public function partenaireAction(): string
    {
        $partenaire = $this->request->getAttribute('partenaire');

        $indicateur = new Indicateur($this->pdo);
        $frsInscrit = (int)$indicateur->nbrFrsInscrit($partenaire);

        /** HC1 **/
        $frsInvite = (int)$indicateur->nbrFrsInvite($partenaire);


        $tableauHC1 = [
            '0' => $frsInscrit,
            '1' => $frsInvite,
        ];
        $trad = $this->getTranslationService();

        $array1['titre'] = $trad->t('Adhésion fournisseurs');
        $array1['Fourchette'] = [0, $frsInvite, true];
        $array1['value'] = $frsInscrit;
        if ($frsInvite) {
            $array1['legend'] = number_format(($frsInscrit * 100) / $frsInvite, 2) . ' %';
        } else {
            $array1['legend'] = '0%';
        }
        $array1['type'] = 'solidgauge';

        $highcharts1 = Highcharts::generate($array1, $this->pdo, $trad);

        /** HC2**/
        $docValide = (int)$indicateur->nbrDocCollectValide($partenaire);
        $docDemande = (int)$indicateur->nbrDocDemande($partenaire);

        $tableauHC2 = [
            '0' => $docValide,
            '1' => ((float)$docDemande * $frsInscrit),
        ];

        $array2['titre'] = $trad->t('Complétude documentaire');
        $array2['Fourchette'] = [0, ($docDemande * $frsInscrit), true];
        $array2['value'] = $docValide;

        if ($docDemande * $frsInscrit) {
            $array2['legend'] = number_format(($docValide * 100) / ($docDemande * $frsInscrit), 2) . ' %';
        } else {
            $array2['legend'] = '0%';
        }
        $array2['type'] = 'solidgauge';

        $highcharts2 = Highcharts::generate($array2, $this->pdo, $trad);

        $listeParentaire = $indicateur->listePartenaire();

        return $this->renderer->render('@Fournisseur/Indicateur/partenaire', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'Fournisseur.Incidateur.indicateur',
            'dataHighchart1' => $highcharts1,
            'dataHighchart2' => $highcharts2,

            'tableauHC1' => $tableauHC1,
            'tableauHC2' => $tableauHC2,

            'listePartenaire' => $listeParentaire,
            'partenaireCurrent' => $partenaire,
        ]);
    }
}
