// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#include "crypto/crypto_read_handler.h"

#include <string>

#include "absl/strings/string_view.h"

namespace credentio {

bool AbslParseFlag(absl::string_view text,
                   CryptoReadHandler::TrustEnvironment* trust,
                   std::string* error) {
  if (text == "prod") {
    *trust = CryptoReadHandler::TrustEnvironment::kProd;
    return true;
  }
  if (text == "qual") {
    *trust = CryptoReadHandler::TrustEnvironment::kQualOnly;
    return true;
  }
  if (text == "qual_and_prod") {
    *trust = CryptoReadHandler::TrustEnvironment::kQualAndProd;
    return true;
  }
  if (text == "dev") {
    *trust = CryptoReadHandler::TrustEnvironment::kDevOnly;
    return true;
  }
  if (text == "any") {
    *trust = CryptoReadHandler::TrustEnvironment::kAny;
    return true;
  }
  *error = "unknown trust environment";
  return false;
}

std::string AbslUnparseFlag(CryptoReadHandler::TrustEnvironment trust) {
  switch (trust) {
    case CryptoReadHandler::TrustEnvironment::kProd:
      return "prod";
    case CryptoReadHandler::TrustEnvironment::kQualOnly:
      return "qual";
    case CryptoReadHandler::TrustEnvironment::kQualAndProd:
      return "qual_and_prod";
    case CryptoReadHandler::TrustEnvironment::kDevOnly:
      return "dev";
    case CryptoReadHandler::TrustEnvironment::kAny:
      return "any";
    case CryptoReadHandler::TrustEnvironment::kUnspecified:
      break;
  }
  return "unknown";
}

}  // namespace credentio
