<?php

namespace Modules\ProjetAchat\TwigExtension;

use Psr\Container\ContainerInterface;
use Skeleton\Router;
use Entity\Model\AoQstTh;
use TwigExtension\FormExtension;
use Entity\Model\AoQstR;
use Entity\Model\DoaAction;
use Entity\Model\DoaActionsActeurs;
use Entity\Model\DoaActionsRACI;
use Entity\Model\DoaTacheH;
use Entity\Model\DoaTaches;
use Helpers\Outil\Outils;
use Helpers\Outil\Sql;
use Modules\Consultation\Repository\Reponse;

class ArboTacheActeur extends \Twig\Extension\AbstractExtension
{
    protected $pdo;
    protected $contenaire;
    private $router;

    public function __construct(\PDO $pdo, ContainerInterface $contenaire, Router $router)
    {
        $this -> pdo = $pdo;
        $this -> contenaire = $contenaire;
        $this -> router = $router;
    }

    public function getFunctions()
    {
        return [

            new \Twig\TwigFunction('buildTreeTacheActeur', [
                $this,
                'buildTreeTacheActeur',
            ], [
                'is_safe' => [
                    'html',
                ],
            ]),
        ];
    }

    public function buildTreeTacheActeur($theme, $idObjet, $trad, $listeRole, $listeActeur, $listeReponsable)
    {
        $trad = $this->contenaire->get(\Helpers\Trad\ITrad::class);
        $formExtension = new FormExtension($this->router, $this->pdo, $this->contenaire);

        $html = '<a class="list-group-item separateur_bottom clearfix" id="zone'.$theme['ID_TACHE_H'].'">
                    <span>'.$theme['LIB'].'</span>
                    <span class="glyphicon glyphicon-chevron-down mg-icon pull-right"></span>
                </a>
                <div class="panel list-sub mg-show" style="display:block;">
                    <div class="panel-body">
                        <div class="list-group" id="id_'.$theme['ID_TACHE_H'].'">';
        
                        $doaTachesH = new DoaTacheH($this->pdo);
                        $listeTachePere = $doaTachesH->findAll(['TYPE_OBJET' => 'D','ID_OBJET' => $idObjet,'ID_PARENT' => $theme['ID_TACHE_H']], [], ['tri_NUM_ORDRE' => 'asc']);

        foreach ($listeTachePere as $tachePere) {
            $html .= $this->buildTreeTacheActeur($tachePere, $idObjet, $trad, $listeRole, $listeActeur, $listeReponsable);
        }

                        $doaTache = new DoaTaches($this->pdo);
                        $listeTaches = $doaTache->findAll(['TYPE_OBJET' => 'D','ID_OBJET' => $idObjet,'ID_TACHE_H' => $theme['ID_TACHE_H']], [], ['tri_NUM_ORDRE' => 'asc']);

        if ($listeTaches) {
            $html .= "<div style='margin-left:10px;'>";
            foreach ($listeTaches as $tache) {
                $html .= "
                    <div class='listeActeur'>
                        <div>".$tache['LIB']."</div>";

                if (Sql::boolSql($tache['TERMINEE']) == 1) {
                    $html .= '<div>'.$trad->t('Terminée').'</div>
                                      <div>'.Outils::convertLibelleGlobal($this->pdo, 'HASTUTIL', '', $tache['RESPONSABLE'], true).'</div>
                                      <div></div>';
                } else {
                    $html .= '<div>'.$formExtension->inputAdvance('SELECT', [
                        'name' => 'SELECT-TACHE-'. $tache['ID_TACHE'],
                        'listeValue' => $listeReponsable,
                        'addStyle' => 'selectForTask',
                        'value' => $tache['RESPONSABLE'],
                    ]).'</div>';
    
                    $html .= '<div class="">'.$formExtension->inputAdvance('ZOOMADVANCE', [
                        'name' => 'ZOOM-TACHE-'. $tache['ID_TACHE'],
                        'addStyle' => 'zoomForTask',
                        'pahtZoom' => $this->router->generateUri('Ajax.liste.utilisateur'),
                        'entity' => 'HASTUTIL',
                        'titleZoom' => $trad->t('Liste des utilisateurs'),
                        'pathConvert' => $this->router->generateUri('Ajax.outil.convertLibelle'),
                        'convertLibelle' => 'convertLibelleGlobal',
                        'pathValidator' => $this->router->generateUri('Ajax.validator.utilisateur'),
                        'paramsValidator' => "{'nomChamp' : '".$trad->t('Utilisateur')."', 'null' : true}",
                        'value' => $tache['RESPONSABLE'],
    
                        'myFuncValidator' => 'updateValueLigne',
                        'paramFuncValidator' => '["ZOOM-TACHE-'.$tache['ID_TACHE'].'"]',
                    ]).'</div>';
    
                    $html .= "<div><input type='checkbox' name='seleced-TACHE-".$tache['ID_TACHE']."' id='seleced-TACHE-".$tache['ID_TACHE']."' class='form-control checkbox checkboxLigne' checked/> </div>";
                }
                
                $html .= " </div>";

                $doaActions = new DoaAction($this->pdo);
                $listeAction = $doaActions->findAll(['TYPE_OBJET' => 'D','ID_OBJET' => $idObjet, 'ID_TACHE' => $tache['ID_TACHE']], [], ['tri_NUM_ORDRE' => 'asc']);

                if ($listeAction) {
                    $html .= "<div style='margin-left:2%'>";

                    foreach ($listeAction as $action) {
                        $html .= "<h4>".$action['LIB']."</h4>";
                                        
                        $doaActionsRACI = new DoaActionsActeurs($this->pdo);
                        $listeRACI = $doaActionsRACI->findAll(['TYPE_OBJET' => 'D','ID_OBJET' => $idObjet, 'ID_TACHE' => $tache['ID_TACHE'], 'ID_ACTION' => $action['ID_ACTION']], []);
                        
                        if ($listeRACI) {
                            foreach ($listeRACI as $raci) {
                                $html .= "
                                <div class='listeActeur' style='margin-left:2%'>
                                    <div>".$listeRole[$raci['ROLE']]."</div>";

                                if (Sql::boolSql($action['TERMINEE']) == 1) {
                                    $html .= '<div>'.$trad->t('Terminée').'</div>
                                                  <div>'.Outils::convertLibelleGlobal($this->pdo, 'HASTUTIL', '', $raci['CODE_ACTEUR'], true).'</div>
                                                  <div></div>';
                                } else {
                                    $html .= '<div>'.$formExtension->inputAdvance('SELECT', [
                                        'name' => 'SELECT-ACTEUR-'. $raci['ID_ACTEUR'],
                                        'listeValue' => $listeActeur,
                                        'addStyle' => 'selectForRACI',
                                        'value' =>  $raci['EMAIL']? 'EMAIL':$raci['CODE_ACTEUR'],
                                    ]).'</div>';
                                    $html .= '<div class="divZoomActeur'.$raci['ID_ACTEUR'].'" style="'.($raci['EMAIL']? 'display:none;':'').'">'.$formExtension->inputAdvance('ZOOMADVANCE', [
                                        'name' => 'ZOOM-ACTEUR-'.$raci['ID_ACTEUR'],
                                        'addStyle' => 'zoomForRACI',
                                        'pahtZoom' => $this->router->generateUri('Ajax.liste.utilisateur'),
                                        'entity' => 'HASTUTIL',
                                        'titleZoom' => $trad->t('Liste des utilisateurs'),
                                        'pathConvert' => $this->router->generateUri('Ajax.outil.convertLibelle'),
                                        'convertLibelle' => 'convertLibelleGlobal',
                                        'pathValidator' => $this->router->generateUri('Ajax.validator.utilisateur'),
                                        'paramsValidator' => "{'nomChamp' : '".$trad->t('Utilisateur')."', 'null' : true}",
                                        'value' => $raci['CODE_ACTEUR'],
    
                                        'myFuncValidator' => 'updateValueLigne',
                                        'paramFuncValidator' => '["ZOOM-ACTEUR-'.$raci['ID_ACTEUR'].'"]',
                                    ]).'</div>';
    
                                    $html .= '<div class="divMailActeur'.$raci['ID_ACTEUR'].'" style="'.($raci['EMAIL']? '':'display:none;').'">'.$formExtension->inputAdvance('TEXT', [
                                        'name' => 'EMAIL-ACTEUR-'.$raci['ID_ACTEUR'],
                                        'pathValidator' => $this->router->generateUri('Ajax.validator.adresseMail'),
                                        'paramsValidator' => "{}",
                                        'value' => $raci['EMAIL'],
    
                                        'myFuncValidator' => 'updateValueLigne',
                                        'paramFuncValidator' => '["EMAIL-ACTEUR-'.$raci['ID_ACTEUR'].'"]',
                                    ]).'</div>';
                
                                    $html .= "<div><input type='checkbox' name='seleced-ACTEUR-".$raci['ID_ACTEUR']."' id='seleced-ACTEUR-".$raci['ID_ACTEUR']."' class='form-control checkbox checkboxLigne' ".($raci['EMAIL']? '':'checked')."/> </div>";
                                }
            
                                    $html .= " </div>";
                            }
                        }
                    }
                                    
                    $html .= "</div>";
                }
            }
            $html .= ".</div>";
        }

        
        $html .= '      </div>
                    </div>
                </div>';

        return $html;
    }
}
