<?php
/* doc-project | stats/fill_table.php | Agrège les ventes et compte les pizzas par date pour Pélissanne et Lançon, puis enregistre le résultat dans les événements statistiques. | Expose: calculateOrderPrice, getOrders | Dépend de: stats/config.php, pos_commandes, pos_pizzas_commandees, pos_modifs_pizzas, pos_pizzas, pos_events | Impacte: BDD pos_events, calculs de vente, réponse AJAX | Tables: pos_commandes(heure_prepa, statut, id), pos_pizzas_commandees(id_pos_commandes, id_pos_pizzas, id), pos_modifs_pizzas(id_pos_pizzas_commandees, data_price), pos_pizzas(id, price_large, class), pos_events(date, montant_total_pelissanne, montant_total_lancon, nombre_pelissanne, nombre_lancon) */
// fill_table.php
// Inclure le fichier de configuration pour accéder à la base de données
include 'config.php';

// Vérifier que la connexion PDO est établie
if (!isset($pdo)) {
    die('Erreur de connexion à la base de données.');
}

// Récupérer la date envoyée par le bouton via AJAX
$date = $_POST['date'] ?? null;

if (!$date) {
    die('Date non fournie.');
}

// Fonction pour calculer le prix d'une commande et compter le nombre de pizzas
function calculateOrderPrice($pdo, $orderId, $suffix) {
    $prixFinalCentimes = 0; // Initialiser le prix total en centimes
    $totalPizzas = 0; // Initialiser le nombre total de pizzas

    // Récupérer les pizzas commandées dans la commande donnée
    $stmt = $pdo->prepare("SELECT ppc.id, ppc.id_pos_pizzas
                           FROM pos_pizzas_commandees{$suffix} ppc
                           WHERE ppc.id_pos_commandes{$suffix} = :orderId");
    $stmt->execute([':orderId' => $orderId]);
    $pizzasCommande = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($pizzasCommande as $pizza) {
        // Obtenir le prix de base de la pizza en centimes et sa classe
        $stmt = $pdo->prepare("SELECT price_large * 100 as price_large_centimes, class
                               FROM pos_pizzas WHERE id = :pizzaId");
        $stmt->execute([':pizzaId' => $pizza['id_pos_pizzas']]);
        $pizzaDetails = $stmt->fetch(PDO::FETCH_ASSOC);

        $basePriceCentimes = $pizzaDetails['price_large_centimes'] ?? 0;
        $prixFinalCentimes += $basePriceCentimes;

        // Incrémenter le nombre total de pizzas si la classe est 'pizza'
        if ($pizzaDetails['class'] == 'pizza') {
            $totalPizzas += 1;
        }

        // Récupérer et ajouter les prix des options pour cette pizza
        $stmt = $pdo->prepare("SELECT data_price * 100 as data_price_centimes FROM pos_modifs_pizzas{$suffix} WHERE id_pos_pizzas_commandees{$suffix} = :pizzaId");
        $stmt->execute([':pizzaId' => $pizza['id']]);
        $options = $stmt->fetchAll(PDO::FETCH_ASSOC);

        foreach ($options as $option) {
            $prixFinalCentimes += $option['data_price_centimes'] ?? 0;
        }
    }

    // Convertir le prix total en euros et arrondir à deux décimales
    $prixFinalEuros = round($prixFinalCentimes / 100, 2);

    return [
        'price' => $prixFinalEuros,
        'pizzas' => $totalPizzas
    ];
}

// Fonction pour récupérer les commandes pour une plage de dates et un suffixe donnés
function getOrders($pdo, $timestampStart, $timestampEnd, $suffix) {
    $stmt = $pdo->prepare("
        SELECT id
        FROM pos_commandes{$suffix}
        WHERE heure_prepa BETWEEN :start AND :end
          AND statut != 'deleted'
    ");
    $stmt->execute([
        ':start' => $timestampStart,
        ':end' => $timestampEnd
    ]);
    $orders = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $orders;
}

// Procéder au calcul des données de ventes pour la date donnée

// Obtenir les timestamps de début et de fin pour la date
$timestampStart = strtotime($date . ' 00:00:00') * 1000; // heure_prepa en millisecondes
$timestampEnd = strtotime($date . ' 23:59:59') * 1000;

// Initialiser les totaux
$totalAmountPelissanne = 0;
$totalPizzasPelissanne = 0;
$totalAmountLancon = 0;
$totalPizzasLancon = 0;

// Calculer les données pour Pélissanne
$ordersPelissanne = getOrders($pdo, $timestampStart, $timestampEnd, '_pel');
foreach ($ordersPelissanne as $order) {
    $orderId = $order['id'];
    $orderData = calculateOrderPrice($pdo, $orderId, '_pel');
    $totalAmountPelissanne += $orderData['price'];
    $totalPizzasPelissanne += $orderData['pizzas'];
}

// Calculer les données pour Lançon
$ordersLancon = getOrders($pdo, $timestampStart, $timestampEnd, '');
foreach ($ordersLancon as $order) {
    $orderId = $order['id'];
    $orderData = calculateOrderPrice($pdo, $orderId, '');
    $totalAmountLancon += $orderData['price'];
    $totalPizzasLancon += $orderData['pizzas'];
}

// Vérifier si les données pour cette date existent déjà dans pos_events
$stmt = $pdo->prepare("SELECT * FROM pos_events WHERE date = :date");
$stmt->execute([':date' => $date]);
$eventData = $stmt->fetch(PDO::FETCH_ASSOC);

// Insérer ou mettre à jour les données dans pos_events
if ($eventData) {
    // Mettre à jour
    $stmtUpdate = $pdo->prepare("
        UPDATE pos_events SET
            montant_total_pelissanne = :montantPelissanne,
            montant_total_lancon = :montantLancon,
            nombre_pelissanne = :nombrePelissanne,
            nombre_lancon = :nombreLancon
        WHERE date = :date
    ");
} else {
    // Insérer
    $stmtUpdate = $pdo->prepare("
        INSERT INTO pos_events (date, montant_total_pelissanne, montant_total_lancon, nombre_pelissanne, nombre_lancon)
        VALUES (:date, :montantPelissanne, :montantLancon, :nombrePelissanne, :nombreLancon)
    ");
}

$stmtUpdate->execute([
    ':date' => $date,
    ':montantPelissanne' => $totalAmountPelissanne,
    ':montantLancon' => $totalAmountLancon,
    ':nombrePelissanne' => $totalPizzasPelissanne,
    ':nombreLancon' => $totalPizzasLancon
]);

echo "Données traitées pour la date : $date\n";
?>
