#include "params.h"
#include "can-halal.h"
#include "vehicle.h"

Params params = {0};

void params_init() { params.bbal = 50; }

void params_inc(ParamType param) {
  switch (param) {
  case PF_BBAL:
    params.bbal += 0.5f;
    if (params.bbal > 100.0f) {
      params.bbal = 100.0f;
    }
    break;
  case PF_SLIPREF:
    params.slipref += 0.01f;
    break;
  case PF_MUMAX:
    params.mumax += 0.1f;
    break;
  case PF_ASRP:
    params.asrp++;
    break;
  case PF_ASRON:
    params.asron = 1;
    break;
  case PF_TEST1:
    params.test[0]++;
    break;
  case PF_TEST2:
    params.test[1]++;
    break;
  case PF_TEST3:
    params.test[2]++;
    break;
  case PF_TEST4:
    params.test[3]++;
    break;
  }
}

void params_dec(ParamType param) {
  switch (param) {
  case PF_BBAL:
    params.bbal -= 0.5f;
    if (params.bbal < 0.0f) {
      params.bbal = 0.0f;
    }
    break;
  case PF_SLIPREF:
    if (params.slipref > 0) {
      params.slipref -= 0.01f;
    }
    break;
  case PF_MUMAX:
    if (params.mumax > 0) {
      params.mumax -= 0.1f;
    }
    break;
  case PF_ASRP:
    if (params.asrp > 0) {
      params.asrp--;
    }
    break;
  case PF_ASRON:
    params.asron = 0;
    break;
  case PF_TEST1:
    if (params.test[0] > 0) {
      params.test[0]--;
    }
    break;
  case PF_TEST2:
    if (params.test[1] > 0) {
      params.test[1]--;
    }
    break;
  case PF_TEST3:
    if (params.test[2] > 0) {
      params.test[2]--;
    }
    break;
  case PF_TEST4:
    if (params.test[3] > 0) {
      params.test[3]--;
    }
    break;
  }
}

void params_broadcast(ParamType param) {
  int32_t value;
  switch (param) {
  case PF_BBAL:
    value = params.bbal * 10;
    break;
  case PF_SLIPREF:
    value = params.slipref * 100;
    break;
  case PF_MUMAX:
    value = params.mumax * 10;
    break;
  case PF_ASRP:
    value = params.asrp;
    break;
  case PF_ASRON:
    value = params.asron;
    break;
  case PF_TEST1:
    value = params.test[0];
    break;
  case PF_TEST2:
    value = params.test[1];
    break;
  case PF_TEST3:
    value = params.test[2];
    break;
  case PF_TEST4:
    value = params.test[3];
    break;
  default:
    return;
  }
  vehicle_broadcast_param(param, value);
}