// Copyright 2023 The Chromium 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 "quiche/quic/moqt/tools/moqt_server.h"

#include <memory>
#include <utility>

#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/core/crypto/proof_source.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/quic/moqt/moqt_session.h"
#include "quiche/quic/tools/quic_server.h"
#include "quiche/quic/tools/web_transport_only_backend.h"
#include "quiche/web_transport/web_transport.h"

namespace moqt {

namespace {
quic::WebTransportRequestCallback CreateWebTransportCallback(
    MoqtIncomingSessionCallback callback) {
  return [callback = std::move(callback)](absl::string_view path,
                                          webtransport::Session* session)
             -> absl::StatusOr<std::unique_ptr<webtransport::SessionVisitor>> {
    absl::StatusOr<MoqtConfigureSessionCallback> configurator = callback(path);
    if (!configurator.ok()) {
      return configurator.status();
    }
    MoqtSessionParameters parameters;
    parameters.perspective = quic::Perspective::IS_SERVER;
    parameters.path = path;
    parameters.using_webtrans = true;
    parameters.version = MoqtVersion::kDraft02;
    parameters.deliver_partial_objects = false;
    auto moqt_session = std::make_unique<MoqtSession>(session, parameters);
    std::move (*configurator)(moqt_session.get());
    return moqt_session;
  };
}
}  // namespace

MoqtServer::MoqtServer(std::unique_ptr<quic::ProofSource> proof_source,
                       MoqtIncomingSessionCallback callback)
    : backend_(CreateWebTransportCallback(std::move(callback))),
      server_(std::move(proof_source), &backend_) {}

}  // namespace moqt
