<?php

class Class_gestionFiche
{
    private $pdo = null;
    public static $NB_LIGNES_PAGINATION = 12;
    public static $NB_LIGNES_FICHEAVALIDER = 15;
    

    public function __construct(PdoGsb $pDO)
    {
        $this->pdo = $pDO->getPdoGsb();
    }

    public function getLesUtilisateurs(): array
    {
        $req = 'SELECT "uId", "uNom", "uPrenom" FROM utilisateur WHERE "uStatut"!=0 ORDER BY "uNom" ASC;';
        $result = $this->pdo->prepare($req);
        $result->execute();

        return $result->fetchAll();
    }

    public function dateComplete(string $date): string
    {
        return substr($date, 0, 4) . '-' . substr($date, 4);
    }

    public function get_ficheAvalider(int $nPage): array
    {
        $decalage = ($nPage - 1) * $this::$NB_LIGNES_FICHEAVALIDER;
        $req = 'SELECT "rMois", "rVisiteur", "rEtat", ROUND("rMontantValide", 2) 
        as "rMontantValide", "eLibelle", "uNom", "uPrenom"
        from remboursement 
        INNER JOIN utilisateur ON utilisateur."uId"=remboursement."rVisiteur"
        INNER JOIN etat ON etat."eId"=remboursement."rEtat"
        where "rEtat"=\'CL\'
        ORDER BY "rMois" ASC 
        LIMIT :nbLignes offset :decalage;';
        $result = $this->pdo->prepare($req);
        $result->bindParam('nbLignes', $this::$NB_LIGNES_FICHEAVALIDER);
        $result->bindParam('decalage', $decalage);
        $result->execute();

        return $result->fetchAll();
    }

    public function get_nbFicheAvalider(): int
    {
        $req = 'SELECT COUNT(*) as "nbFicheAvalider" from remboursement 
        where "rEtat"=\'CL\'';
        $result = $this->pdo->prepare($req);
        $result->execute();
        $result = $result->fetch();

        return (int) $result['nbFicheAvalider'];
    }

    public function get_nbRemboursement(string $idUtilisateur): int
    {
        $req = 'SELECT COUNT(*) as "nbRemboursement" from remboursement WHERE "rVisiteur"= :userId;';
        $result = $this->pdo->prepare($req);
        $result->bindParam("userId", $idUtilisateur);
        $result->execute();
        $result = $result->fetch();

        return (int) $result['nbRemboursement'];
    }

    public function get_Page(int $nPage, string $idUtilisateur): array
    {
        $decalage = ($nPage - 1) * $this::$NB_LIGNES_PAGINATION;
        $req = 'SELECT "rMois", "rVisiteur", "rEtat", ROUND("rMontantValide", 2) 
        as "rMontantValide", "eLibelle"
        FROM remboursement 
        INNER JOIN etat ON etat."eId"=remboursement."rEtat"
        WHERE "rVisiteur"= :userId
        ORDER BY "rDateModif" DESC LIMIT :nbLignes offset :decalage;';
        $result = $this->pdo->prepare($req);
        $result->bindParam('nbLignes', $this::$NB_LIGNES_PAGINATION);
        $result->bindParam('decalage', $decalage);
        $result->bindParam('userId', $idUtilisateur);
        $result->execute();

        return $result->fetchAll(PDO::FETCH_ASSOC);
    }
}
