#include "output.h"
#include "sensors.h"

#include <stdio.h>
#include <unistd.h>

// ============= サンプル実行用コード =============
// 本来は各センサ・ドライバのソースコードに記述される想定
static float get_sensor_A_value(void)
{
    return 154.25;
}

static float get_sensor_B_value(void)
{
    return 567.80;
}

static float get_sensor_C_value(void)
{
    return 3555.08;
}
// =============================================

static const sensor_config_t SENSOR_CONFIGS[] = {
    {{"A", get_sensor_A_value}, 1},
    {{"B", get_sensor_B_value}, 2},
    {{"C", get_sensor_C_value}, 4},
};
static const size_t MAX_SENSORS =
    sizeof(SENSOR_CONFIGS) /
    sizeof(sensor_config_t);

/// @brief
/// センサから値を取得してJSON形式の文字列に変換する
static void get_sensors_report(size_t iteration,
                               char* buffer,
                               size_t buffer_size)
{
    const sensor_t* target_sensors[MAX_SENSORS];
    const size_t num_targets = get_target_sensors(
        SENSOR_CONFIGS, MAX_SENSORS, iteration,
        target_sensors);

    sensor_data_t values[MAX_SENSORS];
    sensor_data_collect(target_sensors, num_targets,
                        values);

    sensor_data_output_json(values, num_targets,
                            buffer, buffer_size);
}

// ============= サンプル実行用コード =============
// 出力したJSONをテストするためのメイン関数
int main(void)
{
    for (size_t i = 1; i < 5; i++) {
        char buffer[256] = {0};
        get_sensors_report(i, buffer, 256);
        printf("%s\n", buffer);
        sleep(1);
    }

    return 0;
}
// =============================================
