#include "block_cmd.hpp"

#include "actions.hpp"
#include "args.hpp"
#include "settings.hpp"
#include "utils/error.hpp"
#include "utils/string.hpp"

namespace monitarr {
auto block_cmd(int argc, char **argv, const app_config &cfg) -> int {
  MONITARR_USES_FUNCTION_NAME();

  auto idx = get_arg("-i", argc, argv);
  if (not idx.has_value()) {
    utils::error::handle_error(function_name, "'-i <index>' is required");
    return 3;
  }

  auto &server = cfg.server_list.at(utils::string::to_uint64(*idx));
  auto record_id = get_arg("-id", argc, argv);
  if (not record_id.has_value()) {
    utils::error::handle_error(function_name, "'-id <record id>' is required");
    return 3;
  }

  auto entry = get_download(utils::string::to_uint64(*record_id), server);
  if (not entry.has_value()) {
    utils::error::handle_error(function_name,
                               fmt::format("record {} not found", *record_id));
    return 3;
  }

  remove_stalled(fmt::format("{}/{}", server.id, *record_id),
                 entry->at("title").get<std::string>(), 0U,
                 entry->at("movieId").get<std::uint64_t>(), server);
  return 0;
}
} // namespace monitarr
