// Copyright 2020 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.

#include "src/developer/forensics/feedback/reboot_log/reboot_reason.h"

#include <fuchsia/feedback/cpp/fidl.h>
#include <lib/syslog/cpp/macros.h>

#include "src/developer/forensics/utils/cobalt/metrics.h"

namespace forensics {
namespace feedback {

std::string ToString(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kNotParseable:
      return "NOT PARSEABLE";
    case RebootReason::kGenericGraceful:
      return "GENERIC GRACEFUL";
    case RebootReason::kCold:
      return "COLD";
    case RebootReason::kSpontaneous:
      return "SPONTANEOUS";
    case RebootReason::kKernelPanic:
      return "KERNEL PANIC";
    case RebootReason::kOOM:
      return "OOM";
    case RebootReason::kHardwareWatchdogTimeout:
      return "HARDWARE WATCHDOG TIMEOUT";
    case RebootReason::kSoftwareWatchdogTimeout:
      return "SOFTWARE WATCHDOG TIMEOUT";
    case RebootReason::kBrownout:
      return "BROWNOUT";
    case RebootReason::kRootJobTermination:
      return "ROOT JOB TERMINATION";
    case RebootReason::kUserRequest:
      return "USER REQUEST";
    case RebootReason::kSystemUpdate:
      return "SYSTEM UPDATE";
    case RebootReason::kRetrySystemUpdate:
      return "RETRY SYSTEM UPDATE";
    case RebootReason::kZbiSwap:
      return "ZBI SWAP";
    case RebootReason::kHighTemperature:
      return "HIGH TEMPERATURE";
    case RebootReason::kSessionFailure:
      return "SESSION FAILURE";
    case RebootReason::kSysmgrFailure:
      return "SYSMGR FAILURE";
    case RebootReason::kCriticalComponentFailure:
      return "CRITICAL COMPONENT FAILURE";
    case RebootReason::kFdr:
      return "FACTORY DATA RESET";
  }
}

bool IsCrash(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kNotParseable:
    case RebootReason::kSpontaneous:
    case RebootReason::kKernelPanic:
    case RebootReason::kOOM:
    case RebootReason::kHardwareWatchdogTimeout:
    case RebootReason::kSoftwareWatchdogTimeout:
    case RebootReason::kBrownout:
    case RebootReason::kRootJobTermination:
    case RebootReason::kSessionFailure:
    case RebootReason::kSysmgrFailure:
    case RebootReason::kCriticalComponentFailure:
    case RebootReason::kRetrySystemUpdate:
    case RebootReason::kHighTemperature:
    case RebootReason::kGenericGraceful:
      return true;
    case RebootReason::kUserRequest:
    case RebootReason::kSystemUpdate:
    case RebootReason::kZbiSwap:
    case RebootReason::kCold:
    case RebootReason::kFdr:
      return false;
  }
}

bool IsFatal(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kNotParseable:
    case RebootReason::kSpontaneous:
    case RebootReason::kKernelPanic:
    case RebootReason::kOOM:
    case RebootReason::kHardwareWatchdogTimeout:
    case RebootReason::kSoftwareWatchdogTimeout:
    case RebootReason::kBrownout:
    case RebootReason::kRootJobTermination:
    case RebootReason::kSysmgrFailure:
    case RebootReason::kCriticalComponentFailure:
    case RebootReason::kRetrySystemUpdate:
    case RebootReason::kHighTemperature:
    case RebootReason::kGenericGraceful:
      return true;
    case RebootReason::kUserRequest:
    case RebootReason::kSystemUpdate:
    case RebootReason::kZbiSwap:
    case RebootReason::kCold:
    case RebootReason::kSessionFailure:
    case RebootReason::kFdr:
      return false;
  }
}

std::optional<bool> OptionallyGraceful(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kGenericGraceful:
    case RebootReason::kUserRequest:
    case RebootReason::kSystemUpdate:
    case RebootReason::kRetrySystemUpdate:
    case RebootReason::kZbiSwap:
    case RebootReason::kHighTemperature:
    case RebootReason::kSessionFailure:
    case RebootReason::kSysmgrFailure:
    case RebootReason::kCriticalComponentFailure:
    case RebootReason::kFdr:
      return true;
    case RebootReason::kCold:
    case RebootReason::kSpontaneous:
    case RebootReason::kKernelPanic:
    case RebootReason::kOOM:
    case RebootReason::kHardwareWatchdogTimeout:
    case RebootReason::kSoftwareWatchdogTimeout:
    case RebootReason::kBrownout:
    case RebootReason::kRootJobTermination:
      return false;
    case RebootReason::kNotParseable:
      return std::nullopt;
  }
}

cobalt::LastRebootReason ToCobaltLastRebootReason(RebootReason reason) {
  switch (reason) {
    case RebootReason::kNotParseable:
      return cobalt::LastRebootReason::kUnknown;
    case RebootReason::kGenericGraceful:
      return cobalt::LastRebootReason::kGenericGraceful;
    case RebootReason::kUserRequest:
      return cobalt::LastRebootReason::kUserRequest;
    case RebootReason::kSystemUpdate:
      return cobalt::LastRebootReason::kSystemUpdate;
    case RebootReason::kRetrySystemUpdate:
      return cobalt::LastRebootReason::kRetrySystemUpdate;
    case RebootReason::kZbiSwap:
      return cobalt::LastRebootReason::kZbiSwap;
    case RebootReason::kHighTemperature:
      return cobalt::LastRebootReason::kHighTemperature;
    case RebootReason::kSessionFailure:
      return cobalt::LastRebootReason::kSessionFailure;
    case RebootReason::kSysmgrFailure:
      return cobalt::LastRebootReason::kSysmgrFailure;
    case RebootReason::kCriticalComponentFailure:
      return cobalt::LastRebootReason::kCriticalComponentFailure;
    case RebootReason::kFdr:
      return cobalt::LastRebootReason::kFactoryDataReset;
    case RebootReason::kCold:
      return cobalt::LastRebootReason::kCold;
    case RebootReason::kSpontaneous:
      return cobalt::LastRebootReason::kBriefPowerLoss;
    case RebootReason::kKernelPanic:
      return cobalt::LastRebootReason::kKernelPanic;
    case RebootReason::kOOM:
      return cobalt::LastRebootReason::kSystemOutOfMemory;
    case RebootReason::kHardwareWatchdogTimeout:
      return cobalt::LastRebootReason::kHardwareWatchdogTimeout;
    case RebootReason::kSoftwareWatchdogTimeout:
      return cobalt::LastRebootReason::kSoftwareWatchdogTimeout;
    case RebootReason::kBrownout:
      return cobalt::LastRebootReason::kBrownout;
    case RebootReason::kRootJobTermination:
      return cobalt::LastRebootReason::kRootJobTermination;
  }
}

std::string ToCrashSignature(const RebootReason reason,
                             const std::optional<std::string>& critical_process) {
  switch (reason) {
    case RebootReason::kNotParseable:
      return "fuchsia-reboot-log-not-parseable";
    case RebootReason::kSpontaneous:
      return "fuchsia-brief-power-loss";
    case RebootReason::kKernelPanic:
      return "fuchsia-kernel-panic";
    case RebootReason::kOOM:
      return "fuchsia-oom";
    case RebootReason::kHardwareWatchdogTimeout:
      return "fuchsia-hw-watchdog-timeout";
    case RebootReason::kSoftwareWatchdogTimeout:
      return "fuchsia-sw-watchdog-timeout";
    case RebootReason::kBrownout:
      return "fuchsia-brownout";
    case RebootReason::kRootJobTermination:
      return (!critical_process.has_value())
                 ? "fuchsia-root-job-termination"
                 : std::string("fuchsia-reboot-").append(*critical_process).append("-terminated");

    case RebootReason::kSessionFailure:
      return "fuchsia-session-failure";
    case RebootReason::kSysmgrFailure:
      return "fuchsia-sysmgr-failure";
    case RebootReason::kCriticalComponentFailure:
      return "fuchsia-critical-component-failure";
    case RebootReason::kRetrySystemUpdate:
      return "fuchsia-retry-system-update";
    case RebootReason::kGenericGraceful:
      return "fuchsia-undetermined-userspace-reboot";
    case RebootReason::kHighTemperature:
      return "fuchsia-reboot-high-temperature";
    case RebootReason::kUserRequest:
    case RebootReason::kSystemUpdate:
    case RebootReason::kZbiSwap:
    case RebootReason::kCold:
    case RebootReason::kFdr:
      FX_LOGS(FATAL) << "Not expecting a crash for reboot reason: " << ToString(reason);
      return "FATAL ERROR";
  }
}

std::string ToCrashProgramName(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kNotParseable:
      return "reboot-log";
    case RebootReason::kKernelPanic:
      return "kernel";
    case RebootReason::kBrownout:
    case RebootReason::kHardwareWatchdogTimeout:
    case RebootReason::kSpontaneous:
      return "device";
    case RebootReason::kOOM:
    case RebootReason::kSoftwareWatchdogTimeout:
    case RebootReason::kRootJobTermination:
    case RebootReason::kSessionFailure:
    case RebootReason::kSysmgrFailure:
    case RebootReason::kCriticalComponentFailure:
    case RebootReason::kRetrySystemUpdate:
    case RebootReason::kHighTemperature:
    case RebootReason::kGenericGraceful:
      return "system";
    case RebootReason::kUserRequest:
    case RebootReason::kSystemUpdate:
    case RebootReason::kZbiSwap:
    case RebootReason::kCold:
    case RebootReason::kFdr:
      FX_LOGS(FATAL) << "Not expecting a program name request for reboot reason: "
                     << ToString(reason);
      return "FATAL ERROR";
  }
}

std::optional<fuchsia::feedback::RebootReason> ToFidlRebootReason(const RebootReason reason) {
  switch (reason) {
    case RebootReason::kGenericGraceful:
      return std::nullopt;
    case RebootReason::kUserRequest:
      return fuchsia::feedback::RebootReason::USER_REQUEST;
    case RebootReason::kSystemUpdate:
      return fuchsia::feedback::RebootReason::SYSTEM_UPDATE;
    case RebootReason::kRetrySystemUpdate:
      return fuchsia::feedback::RebootReason::RETRY_SYSTEM_UPDATE;
    case RebootReason::kZbiSwap:
      return fuchsia::feedback::RebootReason::ZBI_SWAP;
    case RebootReason::kHighTemperature:
      return fuchsia::feedback::RebootReason::HIGH_TEMPERATURE;
    case RebootReason::kSessionFailure:
      return fuchsia::feedback::RebootReason::SESSION_FAILURE;
    case RebootReason::kSysmgrFailure:
      return fuchsia::feedback::RebootReason::SYSMGR_FAILURE;
    case RebootReason::kCriticalComponentFailure:
      return fuchsia::feedback::RebootReason::CRITICAL_COMPONENT_FAILURE;
    case RebootReason::kFdr:
      return fuchsia::feedback::RebootReason::FACTORY_DATA_RESET;
    case RebootReason::kCold:
      return fuchsia::feedback::RebootReason::COLD;
    case RebootReason::kSpontaneous:
      return fuchsia::feedback::RebootReason::BRIEF_POWER_LOSS;
    case RebootReason::kKernelPanic:
      return fuchsia::feedback::RebootReason::KERNEL_PANIC;
    case RebootReason::kOOM:
      return fuchsia::feedback::RebootReason::SYSTEM_OUT_OF_MEMORY;
    case RebootReason::kHardwareWatchdogTimeout:
      return fuchsia::feedback::RebootReason::HARDWARE_WATCHDOG_TIMEOUT;
    case RebootReason::kSoftwareWatchdogTimeout:
      return fuchsia::feedback::RebootReason::SOFTWARE_WATCHDOG_TIMEOUT;
    case RebootReason::kBrownout:
      return fuchsia::feedback::RebootReason::BROWNOUT;
    case RebootReason::kRootJobTermination:
      return fuchsia::feedback::RebootReason::ROOT_JOB_TERMINATION;
    case RebootReason::kNotParseable:
      return std::nullopt;
  }
}

}  // namespace feedback
}  // namespace forensics
