/** @file

  A brief file prefix

  @section license License

  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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

      http://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.
*/

/*
  Please refer to traffic_layout document for the runroot usage
*/

#pragma once

#include <string>
#include <unordered_map>

// name of the directory declared globally
const std::string LAYOUT_PREFIX        = "prefix";
const std::string LAYOUT_EXEC_PREFIX   = "exec_prefix";
const std::string LAYOUT_BINDIR        = "bindir";
const std::string LAYOUT_SBINDIR       = "sbindir";
const std::string LAYOUT_SYSCONFDIR    = "sysconfdir";
const std::string LAYOUT_DATADIR       = "datadir";
const std::string LAYOUT_INCLUDEDIR    = "includedir";
const std::string LAYOUT_LIBDIR        = "libdir";
const std::string LAYOUT_LIBEXECDIR    = "libexecdir";
const std::string LAYOUT_LOCALSTATEDIR = "localstatedir";
const std::string LAYOUT_RUNTIMEDIR    = "runtimedir";
const std::string LAYOUT_LOGDIR        = "logdir";
const std::string LAYOUT_MANDIR        = "mandir";
const std::string LAYOUT_INFODIR       = "infodir";
const std::string LAYOUT_CACHEDIR      = "cachedir";

using RunrootMapType = std::unordered_map<std::string, std::string>;

// some checks for directory exist or is it a directory
// this is a temporary approach and will be replaced
bool exists(const std::string &dir);
bool is_directory(const std::string &directory);

// argparser_runroot_handler should replace runroot_handler below when all program use ArgParser.
void argparser_runroot_handler(std::string const &value, const char *executable, bool json = false);
void runroot_handler(const char **argv, bool json = false);

// get a map from default layout
std::unordered_map<std::string, std::string> runroot_map_default();
// get runroot map from yaml path and prefix
RunrootMapType runroot_map(const std::string &prefix);

// help check runroot for layout
RunrootMapType check_runroot();

// To get the runroot value
std::string_view get_runroot();
