// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_SYS_RUN_TEST_COMPONENT_RUN_TEST_COMPONENT_H_
#define SRC_SYS_RUN_TEST_COMPONENT_RUN_TEST_COMPONENT_H_

#include <fuchsia/sys/cpp/fidl.h>
#include <lib/fitx/result.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/syslog/cpp/macros.h>

#include <string>

namespace run {

struct ParseArgsResult {
  bool error;
  std::string error_msg;
  fuchsia::sys::LaunchInfo launch_info;
  std::vector<std::string> matching_urls;
  std::string realm_label;
  /// Timeout in seconds for test. By default there is no timeout.
  int32_t timeout = -1;
  int32_t min_log_severity = syslog::LOG_TRACE;
  int32_t max_log_severity = syslog::LOG_FATAL;
};

// Parses args.
ParseArgsResult ParseArgs(const std::shared_ptr<sys::ServiceDirectory>& services, int argc,
                          const char** argv);

// Strips url of query parameters. For eg
//  "fuchsia-pkg://fuchsia.com/my-pkg?hash=hash#meta/my-component.cmx" will return
//  "fuchsia-pkg://fuchsia.com/my-pkg#meta/my-component.cmx".
std::string GetSimplifiedUrl(const std::string& url);

// Parse log level and return corresponding integer representation.
fitx::result<bool, uint32_t> ParseLogLevel(const std::string& level);

}  // namespace run

#endif  // SRC_SYS_RUN_TEST_COMPONENT_RUN_TEST_COMPONENT_H_
