<?php
require_once __DIR__ . '/../models/TypeVehicule.php';
require_once __DIR__ . '/../models/Tarif.php';
require_once __DIR__ . '/../models/BonVers.php';

class VersementController2 {
    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function getRapportVersement() {
        $annee = $_GET['annee'] ?? null;
        $mois = $_GET['mois'] ?? null;
        $operateur = $_GET['operateur'] ?? null;

        if (!$annee || !$mois) {
            echo json_encode([
                'success' => false,
                'message' => 'Paramètres annee et mois requis'
            ]);
            return;
        }

        // Calculer les dates de début et fin du mois
        $dateDebut = sprintf("%04d-%02d-01", intval($annee), intval($mois));
        
        // Obtenir le dernier jour du mois
        $queryLastDay = "SELECT LAST_DAY('$dateDebut') as last_day";
        $stmtLastDay = $this->db->query($queryLastDay);
        $resultLastDay = $stmtLastDay->fetch(PDO::FETCH_ASSOC);
        $dateFin = $resultLastDay['last_day'];

        // Requête avec filtrage sur la date (sans l'heure) en utilisant CAST
        $query = "SELECT matricule, SUM(mt_ttc) as total_ttc, COUNT(*) as nb_enregistrements
                  FROM bons_vers 
                  WHERE CAST(date_vers AS DATE) >= :date_debut AND CAST(date_vers AS DATE) <= :date_fin";
        
        $params = [
            ':date_debut' => $dateDebut,
            ':date_fin' => $dateFin
        ];

        // Si un opérateur spécifique est demandé
        if ($operateur && $operateur !== 'TOUS LES OPERATEURS' && $operateur !== 'TOUT' && $operateur !== '') {
            $query .= " AND operateur = :operateur";
            $params[':operateur'] = $operateur;
        }

        $query .= " GROUP BY matricule 
                    ORDER BY matricule ASC";

        try {
            $stmt = $this->db->prepare($query);
            $stmt->execute($params);
            $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

            // Calculer le total global et le nombre total de BVR
            $totalGlobal = 0.0;
            $totalBvr = 0;
            foreach ($data as $row) {
                $totalGlobal += floatval($row['total_ttc']);
                $totalBvr += intval($row['nb_enregistrements']);
            }

            echo json_encode([
                'success' => true,
                'data' => $data,
                'total_general' => $totalGlobal,
                'nb_bvr' => $totalBvr
            ]);
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'message' => 'Erreur serveur : ' . $e->getMessage()
            ]);
        }
    }
}
?>
