#pragma once

#include <cstdint>
#include <cstddef>

// KNX Group Object Info für Web-API
struct KnxGroupObjectInfo {
    uint16_t goIndex;      // Group Object Index (1-based)
    uint16_t groupAddress; // Gruppenadresse (z.B. 1/2/3 = 0x0A03)
    uint8_t dptMain;       // DPT Haupttyp
    uint8_t dptSub;        // DPT Subtyp
    bool commFlag;         // Kommunikations-Flag
    bool readFlag;         // Lese-Flag
    bool writeFlag;        // Schreib-Flag
};

class KnxWorker {
public:
    KnxWorker();
    void init();
    void toggleProgMode();
    void loop();

    // KNX Gruppenadressen auslesen
    size_t getGroupObjectCount();
    bool getGroupObjectInfo(size_t index, KnxGroupObjectInfo& info);

    // Gruppenadresse als String formatieren (z.B. "1/2/3")
    static void formatGroupAddress(uint16_t addr, char* buf, size_t bufSize);
};
