#include <Arduino.h>
#include <EEPROM.h>

// maxium of 3 profiles
// one profile correspond to 6 bytes => 18 bytes max

// wifi takes up most at 64 bytes -> start reading at byte 65

#define PROFILE_ADDR 65 // Starting address for color profiles in EEPROM
#define PROFILE_SIZE 7  // Size of each color profile in bytes

String loadColorProfile(int profileNumber) {
    char buf[PROFILE_SIZE + 1]; // +1 for null terminator
    EEPROM.get(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE, buf);
    buf[PROFILE_SIZE] = '\0'; // Ensure null termination
    return String(buf);
}

void setColorProfile(int profileNumber, String data) {
    if (data.length() > PROFILE_SIZE) {
        // Data exceeds profile size limit
        return;
    }
    char buf[PROFILE_SIZE];
    data.toCharArray(buf, PROFILE_SIZE);
    // Erase previous data
    for (int i = 0; i < PROFILE_SIZE; i++) {
        EEPROM.write(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE + i, 0);
    }
    // Write new data
    for (int i = 0; i < data.length(); i++) {
        EEPROM.write(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE + i, buf[i]);
    }
    EEPROM.commit();
}

void setup() {
    Serial.begin(115200);
    EEPROM.begin(128);
}

void loop() {
    if (Serial.available() > 0) {
        String inp = Serial.readString();
        inp.trim();
        if (inp == "set") {
            Serial.println("Profile? :");
            while (Serial.available() <= 0) { delay(10); }
            String number = Serial.readString();
            number.trim();
            Serial.println("Data? :");
            while (Serial.available() <= 0) { delay(10); }
            String data = Serial.readString();
            data.trim();
            setColorProfile(number.toInt(), data);
        } else if (inp == "load") {
            Serial.println("Profile? :");
            while (Serial.available() <= 0) { delay(10); }
            String number = Serial.readString();
            number.trim();
            String data = loadColorProfile(number.toInt());
            Serial.println(data); // Print loaded data
        }
    }
    delay(10);
}