// =======================================================================
// LOGIKKISTE - PROFI EINGÄNGE (TASTER & ZÄHLER)
// =======================================================================

Blockly.defineBlocksWithJsonArray([

    // --- 1. PROFI-TASTER (Freie Pin-Eingabe) ---
    {
        "type": "ard_button_pro",
        "message0": "Profi-Taster an PIN %1 %2",
        "args0": [
            {"type": "field_input", "name": "PIN", "text": "2"},
            {
                "type": "field_dropdown",
                "name": "ACTION",
                "options": [
                    ["erkennt Einfachklick", "KK_SINGLE_CLICK"],
                    ["erkennt Doppelklick", "KK_DOUBLE_CLICK"],
                    ["erkennt langes Halten", "KK_LONG_PRESS"],
                    ["wird gerade gedrückt", "IS_PRESSED"],
                    ["wurde soeben losgelassen", "WAS_RELEASED"],
                    ["Gibt Haltezeit zurück (in ms)", "GET_TIME"]
                ]
            }
        ],
        "output": null, 
        "colour": 65, 
        "tooltip": "Universeller Taster. Erkennt Klicks, Zeiten und zählt automatisch mit. Pin frei wählbar."
    },

    // --- 2a. PROFI-TASTER: ZÄHLER LESEN ---
    {
        "type": "ard_button_pro_get_counter",
        "message0": "Lese Klickzähler von Profi-Taster PIN %1",
        "args0": [
            {"type": "field_input", "name": "PIN", "text": "2"}
        ],
        "output": "Number",
        "colour": 65,
        "tooltip": "Gibt die aktuelle Anzahl der Klicks als Zahl zurück."
    },

    // --- 2b. PROFI-TASTER: ZÄHLER SETZEN ---
    {
        "type": "ard_button_pro_set_counter",
        "message0": "Setze Klickzähler von Profi-Taster PIN %1 auf %2",
        "args0": [
            {"type": "field_input", "name": "PIN", "text": "2"},
            {"type": "input_value", "name": "VAL", "check": "Number"}
        ],
        "previousStatement": null,
        "nextStatement": null,
        "colour": 65,
        "tooltip": "Überschreibt den aktuellen Klickzähler mit einem neuen Wert."
    },

    // --- 2c. PROFI-TASTER: ZÄHLER ZURÜCKSETZEN ---
    {
        "type": "ard_button_pro_reset",
        "message0": "Setze Klickzähler von Profi-Taster PIN %1 auf 0",
        "args0": [
            {"type": "field_input", "name": "PIN", "text": "2"}
        ],
        "previousStatement": null,
        "nextStatement": null,
        "colour": 65,
        "tooltip": "Setzt den internen Zähler dieses Tasters wieder auf Null."
    }
]);


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

// --- HILFSFUNKTION FÜR DEN PROFI-TASTER ---
function generateProButton(pinRaw, action, blockId) {
    const pin = String(pinRaw).trim(); 
    let btnName = `btnPro_${pin}`;
    
    // Pin beim Arduino-System anmelden
    ArduinoGenerator.usedPinsInput.add(pin);
    
    // Library und Objekt-Instanz generieren
    ArduinoGenerator.globals_.add(`#include "KK_ButtonHandler.h"`);
    
    // HIER IST DIE ÄNDERUNG: (${pin}) statt (pin${pin})
    ArduinoGenerator.globals_.add(`KK_ButtonHandler ${btnName}(${pin});`); 
    
    // Setup und Loop Funktionen einfügen
    if (!ArduinoGenerator.autoSetup_.includes(`  ${btnName}.begin();\n`)) {
        ArduinoGenerator.autoSetup_.push(`  ${btnName}.begin();\n`);
    }
    if (!ArduinoGenerator.autoLoop_.includes(`  ${btnName}.update();\n`)) {
        ArduinoGenerator.autoLoop_.push(`  ${btnName}.update();\n`);
    }

    // Die passenden Methoden-Aufrufe der Library zurückgeben
    if (action === "IS_PRESSED") return [`${btnName}.isPressed()`, 0];
    if (action === "WAS_RELEASED") return [`${btnName}.wasReleased()`, 0];
    if (action === "GET_TIME") return [`${btnName}.getHoldTime()`, 0];
    
    // Standard Events (Single, Double, Long)
    return [`(${btnName}.getEvent() == ${action})`, 0];
}

// 1. GENERATOR: PROFI TASTER
ArduinoGenerator.forBlock['ard_button_pro'] = function(block) {
    const pin = block.getFieldValue('PIN');
    const action = block.getFieldValue('ACTION');
    return generateProButton(pin, action, block.id);
};

// 2a. GENERATOR: PROFI TASTER ZÄHLER LESEN
ArduinoGenerator.forBlock['ard_button_pro_get_counter'] = function(block) {
    const pin = String(block.getFieldValue('PIN')).trim();
    return [`btnPro_${pin}.getClickCount()`, 0];
};

// 2b. GENERATOR: PROFI TASTER ZÄHLER SETZEN
ArduinoGenerator.forBlock['ard_button_pro_set_counter'] = function(block) {
    const pin = String(block.getFieldValue('PIN')).trim();
    const val = ArduinoGenerator.valueToCode(block, 'VAL', 0) || '0';
    return `  btnPro_${pin}.setClickCount(${val});\n`;
};

// 2c. GENERATOR: PROFI TASTER ZÄHLER RESET
ArduinoGenerator.forBlock['ard_button_pro_reset'] = function(block) {
    const pin = String(block.getFieldValue('PIN')).trim();
    return `  btnPro_${pin}.resetClickCount();\n`;
};