<?php

namespace Modules\GlobalApplication\Outil;

use Modules\GlobalApplication\Repository\UO_oxadw;

    // phpcs:ignore
class Outil_UO_oxadw
{
        
    /**
     * listeUoUser
     *
     * @param  \PDO $pdo
     * @param  string $user
     * @param  string $societe
     * @return array<mixed>
     */
    public static function listeUoUser(\PDO $pdo, string $user, string $societe) : ?array
    {
        $uo_oxadw = new UO_oxadw($pdo);
        
        $listeUO = [];
        
        $uoTMP = $uo_oxadw->UOFicheUser($user);
        $listeUO[] = $uoTMP['USR_CODE_UO']??'';
        $uoTMP = $uo_oxadw->listeUOUser($user, $societe);
        
        foreach ($uoTMP as $ligneUO) {
            $listeUO[] = $ligneUO['UOU_CODE_UO'];
        }
        
        $uoTMP = $uo_oxadw->listeUoRespHierarchique($user, $societe);
        foreach ($uoTMP as $ligneUO) {
            $listeUO[] = $ligneUO['UO_CODE_UO'];
        }

        $listeUO = array_unique($listeUO);
        $listeUO = array_values($listeUO);
        
        foreach ($listeUO as $uo) {
            if ($uo != '') {
                Outil_UO_oxadw::uoFille($pdo, $listeUO, $uo, $societe);
            }
        }
        $listeUO = array_unique($listeUO);
        $listeUO = array_values($listeUO);
        
        return $listeUO;
    }
    
    
    /**
     * uoFille
     *
     * @param  \PDO $pdo
     * @param  array<mixed> $listeUO
     * @param  string $uo
     * @param  string $societe
     * @return void
     */
    private static function uoFille(\PDO $pdo, array &$listeUO, string $uo, string $societe) : void
    {
        $uo_oxadw = new UO_oxadw($pdo);
        
        $tmpUO = $uo_oxadw->uOFille($uo, $societe);
        
        foreach ($tmpUO as $ligneUO) {
            $listeUO[] = $ligneUO['UO_CODE_UO'];
            Outil_UO_oxadw::uoFille($pdo, $listeUO, $ligneUO['UO_CODE_UO'], $societe);
        }
    }
        
    /**
     * listeSiParUO
     *
     * @param  \PDO $pdo
     * @param  string $user
     * @param  string $societe
     * @return array<mixed>
     */
    public static function listeSiParUO(\PDO $pdo, string $user, string $societe) : ?array
    {
        $uo_oxadw = new UO_oxadw($pdo);
        $listeUO = Outil_UO_oxadw::listeUoUser($pdo, $user, $societe);
        
        $listeSITmp = $uo_oxadw->listeSI($listeUO, $societe);
        
        $listeSI = [];
        foreach ($listeSITmp as $si) {
            $listeSI[] = $si['UOI_CODE_IMPUTATION'];
        }

        $listeSI = array_unique($listeSI);
        $listeSI = array_values($listeSI);
        
        return $listeSI;
    }
}
