#ifndef __MAIN_H
#define __MAIN_H

#include "mgos.h"
#include "mgos_gpio.h"

#define CHANNEL_CHANGE_COOLDOWN_SECONDS    0.250
#define CHANNEL_MAX                        16
#define GPIO_INVALID                       255
#define GPIO_MIN                           0
#define GPIO_MAX                           16

struct channel_t {
  uint8_t button_gpio;
  uint8_t led_gpio;
  uint8_t relay_gpio;
  bool    relay_state;
  double  button_last_change;
};

void statusled_blink();
void statusled_init(uint8_t gpio, bool state_off);

bool channel_init(const char *fn);
uint8_t channel_gpio_by_idx(int idx);
uint8_t channel_idx_by_gpio(int gpio);
void channel_set(int idx, bool state);
bool channel_get(int idx);
int channel_get_total();
void channel_handler(int gpio, void *arg);

#endif // __MAIN_H