// Copyright 2024 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 "examples/power/wake_lease/cpp/wake_lease.h"

#include <lib/fpromise/bridge.h>
#include <lib/fpromise/promise.h>

#include <string>

namespace examples::power {

fpromise::promise<WakeLease, Error> WakeLease::Take(
    const fidl::Client<fuchsia_power_system::ActivityGovernor>& client, const std::string& name) {
  fpromise::bridge<WakeLease, Error> bridge;
  client->TakeWakeLease({name}).Then(
      [completer = std::move(bridge.completer)](auto& result) mutable {
        if (!result.is_ok()) {
          completer.complete_error("Failed to take wake lease");
          return;
        }
        completer.complete_ok(WakeLease(std::move(result->token())));
      });
  return bridge.consumer.promise();
}

}  // namespace examples::power
