// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "remoting/protocol/rejecting_authenticator.h"

#include "base/check_op.h"
#include "base/functional/callback.h"
#include "base/notreached.h"

namespace remoting::protocol {

RejectingAuthenticator::RejectingAuthenticator(
    RejectionReason rejection_reason,
    std::string_view rejection_message,
    const base::Location& rejection_location)
    : rejection_reason_(rejection_reason),
      rejection_details_{std::string(rejection_message), rejection_location} {}

RejectingAuthenticator::~RejectingAuthenticator() = default;

CredentialsType RejectingAuthenticator::credentials_type() const {
  return CredentialsType::UNKNOWN;
}

const Authenticator& RejectingAuthenticator::implementing_authenticator()
    const {
  return *this;
}

Authenticator::State RejectingAuthenticator::state() const {
  return state_;
}
bool RejectingAuthenticator::started() const {
  return true;
}

Authenticator::RejectionReason RejectingAuthenticator::rejection_reason()
    const {
  DCHECK_EQ(state_, REJECTED);
  return rejection_reason_;
}

Authenticator::RejectionDetails RejectingAuthenticator::rejection_details()
    const {
  DCHECK_EQ(state_, REJECTED);
  return rejection_details_;
}

void RejectingAuthenticator::ProcessMessage(const JingleAuthentication& message,
                                            base::OnceClosure resume_callback) {
  DCHECK_EQ(state_, WAITING_MESSAGE);
  state_ = REJECTED;
  std::move(resume_callback).Run();
}

JingleAuthentication RejectingAuthenticator::GetNextMessage() {
  NOTREACHED();
}

const std::string& RejectingAuthenticator::GetAuthKey() const {
  NOTREACHED();
}

const SessionPolicies* RejectingAuthenticator::GetSessionPolicies() const {
  NOTREACHED();
}

}  // namespace remoting::protocol
