/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
 * Copyright (c) 2017-2020, Regents of the University of California.
 *
 * This file is part of ndncert, a certificate management system based on NDN.
 *
 * ndncert is free software: you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation, either
 * version 3 of the License, or (at your option) any later version.
 *
 * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received copies of the GNU General Public License along with
 * ndncert, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
 *
 * See AUTHORS.md for complete list of ndncert authors and contributors.
 */

#ifndef NDNCERT_DETAIL_NDNCERT_COMMON_HPP
#define NDNCERT_DETAIL_NDNCERT_COMMON_HPP

#include "detail/ndncert-config.hpp"

#ifdef NDNCERT_HAVE_TESTS
#define NDNCERT_VIRTUAL_WITH_TESTS virtual
#define NDNCERT_PUBLIC_WITH_TESTS_ELSE_PROTECTED public
#define NDNCERT_PUBLIC_WITH_TESTS_ELSE_PRIVATE public
#define NDNCERT_PROTECTED_WITH_TESTS_ELSE_PRIVATE protected
#else
#define NDNCERT_VIRTUAL_WITH_TESTS
#define NDNCERT_PUBLIC_WITH_TESTS_ELSE_PROTECTED protected
#define NDNCERT_PUBLIC_WITH_TESTS_ELSE_PRIVATE private
#define NDNCERT_PROTECTED_WITH_TESTS_ELSE_PRIVATE private
#endif

#include <cstddef>
#include <cstdint>
#include <ndn-cxx/data.hpp>
#include <ndn-cxx/encoding/block-helpers.hpp>
#include <ndn-cxx/encoding/block.hpp>
#include <ndn-cxx/encoding/tlv.hpp>
#include <ndn-cxx/face.hpp>
#include <ndn-cxx/interest.hpp>
#include <ndn-cxx/lp/nack.hpp>
#include <ndn-cxx/name.hpp>
#include <ndn-cxx/security/certificate.hpp>
#include <ndn-cxx/security/key-chain.hpp>
#include <ndn-cxx/util/logger.hpp>
#include <ndn-cxx/util/nonstd/optional.hpp>
#include <tuple>
#include <boost/algorithm/string.hpp>
#include <boost/assert.hpp>
#include <boost/noncopyable.hpp>
#include <boost/property_tree/info_parser.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>

namespace ndn {
namespace ndncert {

namespace tlv {

enum : uint32_t {
  CaPrefix = 129,
  CaInfo = 131,
  ParameterKey = 133,
  ParameterValue = 135,
  CaCertificate = 137,
  MaxValidityPeriod = 139,
  ProbeResponse = 141,
  MaxSuffixLength = 143,
  EcdhPub = 145,
  CertRequest = 147,
  Salt = 149,
  RequestId = 151,
  Challenge = 153,
  Status = 155,
  InitializationVector = 157,
  EncryptedPayload = 159,
  SelectedChallenge = 161,
  ChallengeStatus = 163,
  RemainingTries = 165,
  RemainingTime = 167,
  IssuedCertName = 169,
  ErrorCode = 171,
  ErrorInfo = 173,
  AuthenticationTag = 175,
  CertToRevoke = 177,
  ProbeRedirect = 179
};

} // namespace tlv

using boost::noncopyable;
typedef boost::property_tree::ptree JsonSection;

// NDNCERT error code
enum class ErrorCode : uint64_t {
  NO_ERROR = 0,
  BAD_INTEREST_FORMAT = 1,
  BAD_PARAMETER_FORMAT = 2,
  BAD_SIGNATURE = 3,
  INVALID_PARAMETER = 4,
  NAME_NOT_ALLOWED = 5,
  BAD_VALIDITY_PERIOD = 6,
  OUT_OF_TRIES = 7,
  OUT_OF_TIME = 8,
  NO_AVAILABLE_NAMES = 9
};

// Convert error code to string
std::ostream&
operator<<(std::ostream& os, ErrorCode code);

// NDNCERT request type
enum class RequestType : uint64_t {
  NOTINITIALIZED = 0,
  NEW = 1,
  RENEW = 2,
  REVOKE = 3
};

// Convert request type to string
std::ostream&
operator<<(std::ostream& out, RequestType type);

} // namespace ndncert
} // namespace ndn

#endif // NDNCERT_DETAIL_NDNCERT_COMMON_HPP
