Blockly.defineBlocksWithJsonArray([
    // --- 1. SETUP ---
    {
        "type": "ttp229_setup",
        "message0": "TTP229 Touch Setup | SCL PIN: %1 SDO PIN: %2",
        "args0": [
            {"type": "field_input", "name": "SCL", "text": "3"},
            {"type": "field_input", "name": "SDO", "text": "2"}
        ],
        "message1": "Entprellzeit (ms): %1 Lock-In Zeit (ms): %2",
        "args1": [
            {"type": "field_number", "name": "DEBOUNCE", "value": 80, "min": 10},
            {"type": "field_number", "name": "LOCKIN", "value": 800, "min": 100}
        ],
        "previousStatement": null,
        "nextStatement": null,
        "colour": 85,
        "tooltip": "Initialisiert das 16-Tasten Touchpad."
    },
    
    // --- 2. UPDATE ---
    {
        "type": "ttp229_update",
        "message0": "TTP229 Touch Update (Hintergrund)",
        "previousStatement": null,
        "nextStatement": null,
        "colour": 85,
        "tooltip": "Muss regelmäßig in der Hauptschleife ausgeführt werden."
    },
    
    // --- 3. EINFACHE ZAHLEN (0 wenn losgelassen) ---
    {
        "type": "ttp229_read_pad",
        "message0": "Lese Taste (0 wenn losgelassen)",
        "output": "Number",
        "colour": 85,
        "tooltip": "Gibt die Taste 1-16 zurück, oder 0 wenn aktuell nichts gedrückt wird."
    },

    // --- 4. EINFACHE ZAHLEN (Speichern) ---
    {
        "type": "ttp229_read__save_pad",
        "message0": "Lese Taste (behält letzten Wert)",
        "output": "Number",
        "colour": 85,
        "tooltip": "Speichert den letzten Tastendruck 1-16. Fällt nie auf 0 zurück."
    },

    // --- 5. ZAHLENREIHE (Nummernblock) ---
    {
        "type": "ttp229_read__sequence",
        "message0": "TTP229 aktuelle Zahlenreihe lesen",
        "output": "String",
        "colour": 85,
        "tooltip": "Gibt die gebaute Zahlenreihe (inkl. Kommastelle) zurück."
    },
    
    // --- 6. TEXT LESEN (T9) ---
    {
        "type": "ttp229_get_string",
        "message0": "TTP229 aktuellen T9-Text lesen",
        "output": "String",
        "colour": 85,
        "tooltip": "Gibt den aktuell eingetippten Text im T9-Modus zurück."
    },
    
    // --- 7. ENTER GEDRÜCKT? ---
    {
        "type": "ttp229_is_enter",
        "message0": "TTP229 'Enter' (16) gedrückt?",
        "output": "Boolean",
        "colour": 85,
        "tooltip": "Gibt WAHR zurück, wenn die Taste 16 gedrückt wurde."
    },
    
    // --- 8. RESET ---
    {
        "type": "ttp229_reset",
        "message0": "TTP229 Eingaben & Enter zurücksetzen",
        "previousStatement": null,
        "nextStatement": null,
        "colour": 85,
        "tooltip": "Leert alle Puffer (Text & Zahlen) und setzt Enter zurück."
    }
]);


// =======================================================================
// C++ CODE GENERATOREN
// =======================================================================

ArduinoGenerator.hardwareScanners['ttp229_setup'] = function(block) {
    const scl = block.getFieldValue('SCL').trim();
    const sdo = block.getFieldValue('SDO').trim();
    
    ArduinoGenerator.usedPinsOutput.add(scl);
    ArduinoGenerator.usedPinsInput.add(sdo);
    ArduinoGenerator.globals_.add(`#include "TTP229_T9.h"`);
    ArduinoGenerator.globals_.add(`TTP229_T9 ttpKeypad(${scl}, ${sdo});`);
};

ArduinoGenerator.forBlock['ttp229_setup'] = function(block) {
    const debounce = block.getFieldValue('DEBOUNCE');
    const lockin = block.getFieldValue('LOCKIN');
    ArduinoGenerator.autoSetup_.push(`  ttpKeypad.begin();\n`);
    ArduinoGenerator.autoSetup_.push(`  ttpKeypad.setTimes(${debounce}, ${lockin});\n`);
    return ''; 
};

ArduinoGenerator.forBlock['ttp229_update'] = function(block) { return `  ttpKeypad.update();\n`; };
ArduinoGenerator.forBlock['ttp229_read_pad'] = function(block) { return [`ttpKeypad.getPadSinglePress()`, 0]; };
ArduinoGenerator.forBlock['ttp229_read__save_pad'] = function(block) { return [`ttpKeypad.getPadSaved()`, 0]; };
ArduinoGenerator.forBlock['ttp229_read__sequence'] = function(block) { return [`ttpKeypad.getSequence()`, 0]; };
ArduinoGenerator.forBlock['ttp229_get_string'] = function(block) { return [`ttpKeypad.getString()`, 0]; };
ArduinoGenerator.forBlock['ttp229_is_enter'] = function(block) { return [`ttpKeypad.isEnterPressed()`, 0]; };
ArduinoGenerator.forBlock['ttp229_reset'] = function(block) { return `  ttpKeypad.reset();\n`; };