<?php
/**
 * agrupacion-historial.php
 * Lista notas tipo 15 (agrupaciones) ya creadas.
 *
 * GET params:
 *   filtro  = "mes" | "tx"
 *   mes     = YYYY-MM  (requerido si filtro=mes)
 *   valor   = número   (requerido si filtro=tx)
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

require_once __DIR__ . '/../../config.php';
$db = getDB();

// ── Validar token ─────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo json_encode(['ok' => false, 'error' => 'Sesión inválida o expirada']);
    exit;
}

$filtro = $_GET['filtro'] ?? 'mes';
$mes    = $_GET['mes']    ?? '';
$valor  = trim($_GET['valor'] ?? '');

try {
    $db->exec("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");

    $where  = "t.tipostr_idtipostr = 15";
    $params = [];

    if ($filtro === 'tx' && $valor !== '') {
        $where .= " AND t.idtransacciones = ?";
        $params[] = (int)$valor;
    } else {
        // Default: filtrar por mes
        if ($mes === '') {
            $mes = date('Y-m'); // mes actual si no se especifica
        }
        $where .= " AND DATE_FORMAT(t.fechat, '%Y-%m') = ?";
        $params[] = $mes;
    }

    $sql = "
        SELECT
            t.idtransacciones,
            t.fechat,
            t.horat,
            t.cdentrega,
            t.statusentrega,
            t.usuarios_ci_idusuarios_ci AS cd_venta,
            COALESCE(ta.num_grupo, 0)   AS num_grupo
        FROM transacciones t
        LEFT JOIN transaccion_adicionales ta ON ta.idtransacciones = t.idtransacciones
        WHERE $where
        ORDER BY t.fechat DESC, t.horat DESC
        LIMIT 300
    ";

    $stmt = $db->prepare($sql);
    $stmt->execute($params);
    $grupos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Para cada grupo: obtener productos acumulados y notas individuales
    $stmtProds = $db->prepare("
        SELECT p.productos_idprod AS id_prod, p.cant,
               COALESCE(pr.nombreProd, pm.promodesc, CONCAT('ID:',p.productos_idprod)) AS nombre
        FROM pedido p
        LEFT JOIN productos pr ON pr.id_prod = p.productos_idprod AND p.productos_idprod < 1000
        LEFT JOIN promod pm    ON pm.id_promo = p.productos_idprod AND p.productos_idprod >= 1000
        WHERE p.transacciones_idtransacciones = ?
    ");

    $stmtNotas = $db->prepare("
        SELECT pa.id_transacciones AS idtransacciones,
               t2.statusentrega,
               CONCAT(i.nombre,' ',i.appat,' ',COALESCE(i.apmat,'')) AS nombre_dist,
               i.referencia
        FROM pedido_agrupado pa
        JOIN transacciones t2 ON t2.idtransacciones = pa.id_transacciones
        JOIN inversionista i  ON i.id_inver = t2.inversionista_id_inver
        WHERE pa.num_grupo = ?
        ORDER BY pa.id_transacciones ASC
    ");

    foreach ($grupos as &$g) {
        $g['idtransacciones'] = (int)$g['idtransacciones'];
        $g['cdentrega']       = (int)$g['cdentrega'];
        $g['cd_venta']        = (int)$g['cd_venta'];
        $g['num_grupo']       = (int)$g['num_grupo'];

        // Productos
        $stmtProds->execute([$g['idtransacciones']]);
        $prods = $stmtProds->fetchAll(PDO::FETCH_ASSOC);
        foreach ($prods as &$p) {
            $p['id_prod'] = (int)$p['id_prod'];
            $p['cant']    = (int)$p['cant'];
        }
        unset($p);
        $g['productos']      = $prods;
        $g['total_unidades'] = array_sum(array_column($prods, 'cant'));

        // Notas individuales del grupo
        $g['notas'] = [];
        if ($g['num_grupo'] > 0) {
            $stmtNotas->execute([$g['num_grupo']]);
            $notas = $stmtNotas->fetchAll(PDO::FETCH_ASSOC);
            foreach ($notas as &$n) {
                $n['idtransacciones'] = (int)$n['idtransacciones'];
            }
            unset($n);
            $g['notas'] = $notas;
        }
    }
    unset($g);

    echo json_encode(['ok' => true, 'success' => true, 'data' => ['grupos' => $grupos]]);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['ok' => false, 'success' => false, 'message' => 'Error al obtener historial: ' . $e->getMessage()]);
}
