#pragma once

#include <cstdint>
#include <iostream>
#include <stdexcept> // NOLINT
#include <string>
#include <vector>

#include "boost/beast/http/verb.hpp"  // NOLINT
#include "utility.hpp" // NOLINT

namespace crow {

enum class ParamType : std::uint8_t {
  INT,
  UINT,
  DOUBLE,
  STRING,
  PATH,

  MAX
};

struct RoutingParams {
  std::vector<int64_t> intParams;
  std::vector<uint64_t> uintParams;
  std::vector<double> doubleParams;
  std::vector<std::string> stringParams;

  void debugPrint() const {
    std::cerr << "RoutingParams" << '\n';
    for (auto i : intParams) {
      std::cerr << i << ", ";
    }
    std::cerr << '\n';
    for (auto i : uintParams) {
      std::cerr << i << ", ";
    }
    std::cerr << '\n';
    for (auto i : doubleParams) {
      std::cerr << i << ", ";
    }
    std::cerr << '\n';
    for (const std::string& i : stringParams) {
      std::cerr << i << ", ";
    }
    std::cerr << '\n';
  }

  template <typename T>
  T get(unsigned) const;
};

template <>
inline int64_t RoutingParams::get<int64_t>(unsigned index) const {
  return intParams[index];
}

template <>
inline uint64_t RoutingParams::get<uint64_t>(unsigned index) const {
  return uintParams[index];
}

template <>
inline double RoutingParams::get<double>(unsigned index) const {
  return doubleParams[index];
}

template <>
inline std::string RoutingParams::get<std::string>(unsigned index) const {
  return stringParams[index];
}

}  // namespace crow
