<?php
/**
 * dist-compras.php — Compras de los últimos 6 meses de un distribuidor
 * GET /admin/api/dist-compras.php?id={id_inver}
 *
 * Devuelve la misma estructura que transacciones.php pero filtrada por distribuidor
 * Tipos: 6, 10, 11, 12 (+ 7, 8 si son pendientes)
 * Período: últimos 6 meses
 */
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(['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(['error' => 'Sesión expirada o inválida']);
    exit;
}

$id_inver = (int)($_GET['id'] ?? 0);
if ($id_inver <= 0) {
    http_response_code(400);
    echo json_encode(['error' => 'ID requerido']);
    exit;
}

// ── Calcular rango de 6 meses ─────────────────────────────────────────────
$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');

$tipoLabel = [
    1  => 'Cancelada',
    6  => 'Especial',
    7  => 'Venta Pendiente',
    8  => 'Venta Pendiente',
    10 => 'Venta',
    11 => 'Por Asignar',
    12 => 'Asignación',
];

try {
    // ── Listado de transacciones ───────────────────────────────────────────
    $stmt = $db->prepare("
        SELECT
            t.idtransacciones,
            t.tipostr_idtipostr,
            t.fechat,
            t.consec,
            t.statusentrega,
            t.cdentrega,
            uc.idusuarios_ci AS ci_id,
            uc.nombre        AS centro_nombre,
            COALESCE(d.cantidad, 0) AS cantidad,
            COALESCE(d.puntos,   0) AS puntos,
            COALESCE(pv.porpagar, 0) AS por_pagar,
            COALESCE(pv.efectivo, 0) AS pago_efectivo,
            COALESCE(pv.deposito, 0) AS pago_deposito,
            COALESCE(pv.tarjeta,  0) AS pago_tarjeta,
            COALESCE(pv.regalias, 0) AS pago_regalias,
            COALESCE(pv.voucher,  0) AS pago_voucher
        FROM transacciones t
        JOIN depositos d    ON d.transacciones_idtransacciones = t.idtransacciones
        LEFT JOIN usuarios_ci uc ON uc.idusuarios_ci = t.usuarios_ci_idusuarios_ci
        LEFT JOIN pagovta pv     ON pv.idtransacciones = t.idtransacciones
        WHERE t.inversionista_id_inver = ?
          AND t.tipostr_idtipostr IN (1, 6, 7, 8, 10, 11, 12)
          AND t.fechat BETWEEN ? AND ?
        ORDER BY t.fechat DESC, t.idtransacciones DESC
    ");
    $stmt->execute([$id_inver, $desde, $hasta]);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $transacciones = [];
    $totalMxn    = 0;
    $totalPuntos = 0;
    $totalPorPagar = 0;

    foreach ($rows as $r) {
        $tipo = (int)$r['tipostr_idtipostr'];
        $monto = (float)$r['cantidad'];
        $pts   = (int)$r['puntos'];
        $pp    = (float)$r['por_pagar'];

        // Totales solo para tipos 6, 10, 11
        if (in_array($tipo, [6, 10, 11])) {
            $totalMxn    += $monto;
            $totalPuntos += $pts;
            $totalPorPagar += $pp;
        }

        $transacciones[] = [
            'id'            => (int)$r['idtransacciones'],
            'tipo'          => $tipo,
            'tipo_label'    => $tipoLabel[$tipo] ?? 'Desconocido',
            'es_pendiente'  => in_array($tipo, [7, 8]),
            'es_cancelada'  => ($tipo === 1),
            'es_especial'   => ($tipo === 6),
            'fecha'         => $r['fechat'],
            'consec'        => (int)$r['consec'],
            'statusentrega' => $r['statusentrega'] ?? '',
            'cdentrega'     => (int)($r['cdentrega'] ?? 0),
            'ci_id'         => $r['ci_id']        ?? '',
            'centro_nombre' => $r['centro_nombre'] ?? '',
            'nota'          => ($r['ci_id'] ? $r['ci_id'] . ' - ' . (int)$r['consec'] : '—'),
            'cantidad'      => $monto,
            'puntos'        => $pts,
            'por_pagar'     => $pp,
            'pago_efectivo' => (float)$r['pago_efectivo'],
            'pago_deposito' => (float)$r['pago_deposito'],
            'pago_tarjeta'  => (float)$r['pago_tarjeta'],
            'pago_regalias' => (float)$r['pago_regalias'],
            'pago_voucher'  => (float)$r['pago_voucher'],
        ];
    }

    echo json_encode([
        'success'        => true,
        'transacciones'  => $transacciones,
        'totales' => [
            'mxn'        => $totalMxn,
            'puntos'     => $totalPuntos,
            'por_pagar'  => $totalPorPagar,
            'registros'  => count($transacciones),
        ],
        'periodo' => [
            'desde' => $desde,
            'hasta' => $hasta,
        ],
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['error' => $e->getMessage()]);
}
