// RUN: %check_clang_tidy -std=c++11-or-later %s abseil-time-subtraction %t -- -- -I %S/Inputs
// FIXME: Fix the checker to work in C++17 mode.

#include "absl/time/time.h"

void g(absl::Duration d);

void f() {
  absl::Time t;
  int x, y;
  absl::Duration d;

  d = absl::Hours(absl::ToUnixHours(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixHours(x));
  d = absl::Minutes(absl::ToUnixMinutes(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixMinutes(x));
  d = absl::Seconds(absl::ToUnixSeconds(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixSeconds(x));
  d = absl::Milliseconds(absl::ToUnixMillis(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixMillis(x));
  d = absl::Microseconds(absl::ToUnixMicros(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixMicros(x));
  d = absl::Nanoseconds(absl::ToUnixNanos(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixNanos(x));

  y = x - absl::ToUnixHours(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Hours(absl::FromUnixHours(x) - t);
  y = x - absl::ToUnixMinutes(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Minutes(absl::FromUnixMinutes(x) - t);
  y = x - absl::ToUnixSeconds(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t);
  y = x - absl::ToUnixMillis(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Milliseconds(absl::FromUnixMillis(x) - t);
  y = x - absl::ToUnixMicros(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Microseconds(absl::FromUnixMicros(x) - t);
  y = x - absl::ToUnixNanos(t);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: y = absl::ToInt64Nanoseconds(absl::FromUnixNanos(x) - t);

  // Check parenthesis placement
  d = 5 * absl::Seconds(absl::ToUnixSeconds(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:11: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = 5 * (t - absl::FromUnixSeconds(x));
  d = absl::Seconds(absl::ToUnixSeconds(t) - x) / 5;
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixSeconds(x)) / 5;

  // No extra parens around arguments
  g(absl::Seconds(absl::ToUnixSeconds(t) - x));
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: g(t - absl::FromUnixSeconds(x));
  g(absl::Seconds(x - absl::ToUnixSeconds(t)));
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: g(absl::FromUnixSeconds(x) - t);

  // More complex subexpressions
  d = absl::Hours(absl::ToUnixHours(t) - 5 * x);
  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: d = (t - absl::FromUnixHours(5 * x));

  // These should not trigger; they are likely bugs
  d = absl::Milliseconds(absl::ToUnixSeconds(t) - x);
  d = absl::Seconds(absl::ToUnixMicros(t) - x);

  // Various macro scenarios
#define SUB(z, t1) z - absl::ToUnixSeconds(t1)
  y = SUB(x, t);
#undef SUB

#define MILLIS(t1) absl::ToUnixMillis(t1)
  y = x - MILLIS(t);
#undef MILLIS

#define HOURS(z) absl::Hours(z)
  d = HOURS(absl::ToUnixHours(t) - x);
#undef HOURS

  // This should match the expression inside the macro invocation.
#define SECONDS(z) absl::Seconds(z)
  d = SECONDS(x - absl::ToUnixSeconds(t));
  // CHECK-MESSAGES: [[@LINE-1]]:15: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: SECONDS(absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t))
#undef SECONDS
}

template<typename T>
void func(absl::Time t, T x) {
  absl::Duration d = absl::Seconds(absl::ToUnixSeconds(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:22: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: absl::Duration d = t - absl::FromUnixSeconds(x);
}

void g() {
  func(absl::Now(), 5);
}

absl::Duration parens_in_return() {
  absl::Time t;
  int x;

  return absl::Seconds(absl::ToUnixSeconds(t) - x);
  // CHECK-MESSAGES: [[@LINE-1]]:10: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: return t - absl::FromUnixSeconds(x);
  return absl::Seconds(x - absl::ToUnixSeconds(t));
  // CHECK-MESSAGES: [[@LINE-1]]:10: warning: perform subtraction in the time domain [abseil-time-subtraction]
  // CHECK-FIXES: return absl::FromUnixSeconds(x) - t;
}
