#include <stdint.h>
#include <stdbool.h>

#include <config.h>
#include <eeprom.h>
#include <logger.h>



t_configBlock defaultConfigBlock = {
    .configMagic = CONFIG_MAGIC,
    .deviceName = "MainsCnt",
    .networkspecific.lan.macAddress = { 0x00, 0xA0, 0x57, 0x05, 0x3E, 0x0F },
    .ntpServer = "0.de.pool.ntp.org",
    .deviceId = "MainsCnt01",
    .sharedSecret = "sharedSecretGanzGeheim",
    .sinkServer = "laborpc"
};



t_configBlock mainConfigBlock;



t_configBlock* getConfig() {
    return &mainConfigBlock;
}


void configInit() {
    coloredMsg(LOG_BLUE, "cfg ci Reading configuration block from eeprom");
    eepromReadConfigBlock(&mainConfigBlock);

    if (mainConfigBlock.configMagic != CONFIG_MAGIC) {
        coloredMsg(LOG_BLUE, "cfg ci Invalid configuration block read from eeprom");

        eepromWriteConfigBlock(&defaultConfigBlock);
        coloredMsg(LOG_BLUE, "cfg ci Default configuration block written to eeprom");

        coloredMsg(LOG_BLUE, "cfg ci Reading configuration block from eeprom again");
        eepromReadConfigBlock(&mainConfigBlock);
    }
    coloredMsg(LOG_BLUE, "cfg ci configMagic:         %lx", mainConfigBlock.configMagic);
    coloredMsg(LOG_BLUE, "cfg ci deviceName:          %s", mainConfigBlock.deviceName);
    // coloredMsg(LOG_BLUE, "cfg ci MAC address:         %02x:%02x:%02x:%02x:%02x:%02x", mainConfigBlock.macAddress[0], 
    //                                                                                   mainConfigBlock.macAddress[1], 
    //                                                                                   mainConfigBlock.macAddress[2], 
    //                                                                                   mainConfigBlock.macAddress[3], 
    //                                                                                   mainConfigBlock.macAddress[4], 
    //                                                                                   mainConfigBlock.macAddress[5]);
    coloredMsg(LOG_BLUE, "cfg ci ntp server:          %s", mainConfigBlock.ntpServer);
    coloredMsg(LOG_BLUE, "cfg ci deviceId:            %s", mainConfigBlock.deviceId);
    coloredMsg(LOG_BLUE, "cfg ci sharedSecret:        %s", mainConfigBlock.sharedSecret);
    coloredMsg(LOG_BLUE, "cfg ci sink server:         %s", mainConfigBlock.sinkServer);
}