local filter_peer="" filter_service="" filter_ip="" filter_type=""
  local hours=24
  local accept_only=false drop_only=false external_only=false

  while [[ $# -gt 0 ]]; do
    case "$1" in
      --peer)     filter_peer="$2";    shift 2 ;;
      --service)  filter_service="$2"; shift 2 ;;
      --ip)       filter_ip="$2";      shift 2 ;;
      --type)     filter_type="$2";    shift 2 ;;
      --hours)    hours="$2";          shift 2 ;;
      --accept)   accept_only=true;    shift   ;;
      --drop)     drop_only=true;      shift   ;;
      --external) external_only=true;  shift   ;;
      --help)     cmd::activity::help; return  ;;
      *)
        log::error "Unknown flag: $1"
        cmd::activity::help
        return 1
        ;;
    esac
  done

  if command::json; then
    cmd::activity::_output_json "$hours"
    return 0
  fi

  if [[ -n "$filter_peer" && -n "$filter_type" ]]; then
    filter_peer=$(peers::resolve_and_require "$filter_peer" "$filter_type") || return 1
  fi

  local service_ip=""
  if [[ -n "$filter_service" ]]; then
    service_ip=$(net::resolve "$filter_service" 2>/dev/null | head -1 | cut -d: -f1) || true
    [[ -z "$service_ip" ]] && log::error "Service not found: ${filter_service}" && return 1
  fi
  [[ -n "$filter_ip" ]] && service_ip="$filter_ip"

  # ── Fetch data ──
  local data=""
