// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <wlan/common/element_splitter.h>
#include <wlan/common/tim_element.h>

namespace wlan {
namespace common {

// TODO(hahnr): Support dot11MultiBSSIDActivated is true.
bool IsTrafficBuffered(uint16_t aid, const TimHeader& tim_hdr, fbl::Span<const uint8_t> bitmap) {
  size_t n1 = tim_hdr.bmp_ctrl.offset() * 2;

  size_t octet = aid / 8;
  // No traffic buffered for aid since it's not in the partial bitmap
  if (octet < n1 || octet - n1 >= bitmap.size())
    return false;

  // Traffic might be buffered for aid
  return bitmap[octet - n1] & (1 << (aid % 8));
}

std::optional<ParsedTim> FindAndParseTim(fbl::Span<const uint8_t> ies) {
  auto splitter = common::ElementSplitter{ies};
  auto it = std::find_if(splitter.begin(), splitter.end(), [](auto elem) {
    return std::get<element_id::ElementId>(elem) == element_id::kTim;
  });

  if (it == splitter.end()) {
    return {};
  }

  return common::ParseTim(std::get<1>(*it));
}

}  // namespace common
}  // namespace wlan
