<?php
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: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// REGLA CRÍTICA: config.php está DOS niveles arriba desde admin/api/
require_once __DIR__ . '/../../config.php';

// ── Auth ──────────────────────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Token requerido']);
    exit;
}
$token = trim($m[1]);
$db    = getDB();

$stmtSess = $db->prepare(
    "SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW() LIMIT 1"
);
$stmtSess->execute([$token]);
if (!$stmtSess->fetch()) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Sesión inválida']);
    exit;
}

// ── Parámetros ────────────────────────────────────────────────────────────────
// Rango: últimos 6 meses desde el inicio del mes actual
$year  = (int)date('Y');
$month = (int)date('m');
$m6    = $month - 5;
$y6    = $year;
while ($m6 <= 0) { $m6 += 12; $y6--; }
$desde = sprintf('%04d-%02d-01', $y6, $m6);
$hasta = date('Y-m-d');

$cdentrega = isset($_GET['cdentrega']) ? (int)$_GET['cdentrega'] : 0;

// ── Centros de entrega fijos para el filtro ───────────────────────────────────
$centros = $db->query("
    SELECT idusuarios_ci, nombre
    FROM usuarios_ci
    WHERE idusuarios_ci IN (5, 8, 12, 17, 53, 54, 63)
    ORDER BY idusuarios_ci
")->fetchAll(PDO::FETCH_ASSOC);

// ── WHERE dinámico ────────────────────────────────────────────────────────────
$where  = "t.tipostr_idtipostr IN (6, 10, 11)
           AND t.statusentrega = 'PENDIENTE'
           AND t.fechat BETWEEN ? AND ?";
$params = [$desde . ' 00:00:00', $hasta . ' 23:59:59'];

if ($cdentrega > 0) {
    $where   .= " AND t.cdentrega = ?";
    $params[] = $cdentrega;
}

// ── Consulta principal: lista de notas pendientes ─────────────────────────────
$stmt = $db->prepare("
    SELECT
        t.idtransacciones,
        t.fechat,
        t.fechae,
        t.tipostr_idtipostr                 AS tipo,
        t.statusentrega,
        t.usuarios_ci_idusuarios_ci         AS id_origen,
        uc_orig.nombre                      AS nombre_origen,
        t.cdentrega                         AS id_destino,
        uc_dest.nombre                      AS nombre_destino,
        COALESCE(SUM(p.cant), 0)            AS unidades,
        COUNT(DISTINCT p.productos_idprod)  AS productos
    FROM transacciones t
    JOIN pedido p          ON p.transacciones_idtransacciones = t.idtransacciones
    JOIN productos pr      ON pr.id_prod = p.productos_idprod
    LEFT JOIN usuarios_ci uc_orig ON uc_orig.idusuarios_ci = t.usuarios_ci_idusuarios_ci
    LEFT JOIN usuarios_ci uc_dest ON uc_dest.idusuarios_ci = t.cdentrega
    WHERE {$where}
      AND pr.activo = 'SI'
      AND pr.tipoprod IN (1, 2)
    GROUP BY t.idtransacciones
    ORDER BY t.fechat DESC
");
$stmt->execute($params);
$notas = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Castear tipos
foreach ($notas as &$n) {
    $n['idtransacciones'] = (int)$n['idtransacciones'];
    $n['tipo']            = (int)$n['tipo'];
    $n['id_origen']       = (int)$n['id_origen'];
    $n['id_destino']      = (int)$n['id_destino'];
    $n['unidades']        = (int)$n['unidades'];
    $n['productos']       = (int)$n['productos'];
}
unset($n);

// ── KPIs ──────────────────────────────────────────────────────────────────────
$totalNotas    = count($notas);
$totalUnidades = array_sum(array_column($notas, 'unidades'));

// Agrupado por centro destino
$porCentro = [];
foreach ($notas as $n) {
    $idcd = $n['id_destino'];
    if (!isset($porCentro[$idcd])) {
        $porCentro[$idcd] = [
            'idcd'     => $idcd,
            'nombre'   => $n['nombre_destino'] ?? "Centro {$idcd}",
            'notas'    => 0,
            'unidades' => 0,
        ];
    }
    $porCentro[$idcd]['notas']++;
    $porCentro[$idcd]['unidades'] += $n['unidades'];
}
usort($porCentro, fn($a, $b) => $b['notas'] - $a['notas']);

echo json_encode([
    'success'       => true,
    'notas'         => $notas,
    'por_centro'    => array_values($porCentro),
    'centros'       => $centros,
    'totales'       => [
        'notas'    => $totalNotas,
        'unidades' => $totalUnidades,
    ],
    'periodo'       => [
        'desde' => $desde,
        'hasta' => $hasta,
    ],
], JSON_UNESCAPED_UNICODE);
