#ifndef MOTORS_ALGORITHMS_H_
#define MOTORS_ALGORITHMS_H_

#include <stdint.h>

namespace frc971 {
namespace motors {

struct ReadingsToBalance {
  // Adds a single reading at index.
  void Add(int index, int32_t value) {
    sums[index] += value;
    ++weights[index];
  }

  int32_t sums[3];
  int weights[3];
};

struct BalancedReadings {
  float readings[3];
};

// Returns three readings which add up to 0 and are the same distances apart as
// the input ones (by weight). The distances between the averages of the inputs
// and the corresponding outputs will be inversely proportional to the weights.
BalancedReadings BalanceReadings(ReadingsToBalance to_balance);

inline BalancedReadings BalanceSimpleReadings(const uint16_t readings[3]) {
  float offset = 0;
  for (int i = 0; i < 3; ++i) {
    offset += static_cast<float>(readings[i]);
  }

  BalancedReadings r;
  for (int i = 0; i < 3; ++i) {
    r.readings[i] = static_cast<float>(readings[i]) + offset / -3;
  }
  return r;
}

}  // namespace motors
}  // namespace frc971

#endif  // MOTORS_ALGORITHMS_H_
