// this file not for generator only

const { luaGenerator } = require('blockly/lua');

// Check if luaGenerator.forBlock is defined and initialize if necessary
if (!luaGenerator.forBlock) {
    luaGenerator.forBlock = {};
}

luaGenerator.forBlock['periph_gen_inv_size'] = function(block, generator) {
    var inv = generator.valueToCode(block, 'INV', generator.ORDER_NONE);

    return [`${inv}.size()`, luaGenerator.ORDER_NONE];
};

luaGenerator.forBlock['periph_gen_inv_list'] = function(block, generator) {
    var inv = generator.valueToCode(block, 'INV', generator.ORDER_NONE);

    return [`${inv}.list()`, luaGenerator.ORDER_NONE];
};

luaGenerator.forBlock['periph_gen_inv_get_item_detail'] = function(block, generator) {
    var inv = generator.valueToCode(block, 'INV', generator.ORDER_NONE);
    var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_NONE);

    return [`${inv}.getItemDetail(${slot})`, luaGenerator.ORDER_NONE];
};

luaGenerator.forBlock['periph_gen_inv_get_item_limit'] = function(block, generator) {
    var inv = generator.valueToCode(block, 'INV', generator.ORDER_NONE);
    var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_NONE);

    return [`${inv}.getItemLimit(${slot})`, luaGenerator.ORDER_NONE];
};

luaGenerator.forBlock['periph_gen_inv_transfer_items'] = function(block, generator) {
    var inv1 = generator.valueToCode(block, 'INV1', generator.ORDER_ATOMIC);
    var inv1slot = generator.valueToCode(block, 'INV1SLOT', generator.ORDER_ATOMIC);
    var mode = block.getFieldValue('MODE');
    var inv2 = generator.valueToCode(block, 'INV2', generator.ORDER_ATOMIC);
    var inv2slot = generator.valueToCode(block, 'INV2SLOT', generator.ORDER_ATOMIC);
    var limit = generator.valueToCode(block, 'LIMIT', generator.ORDER_ATOMIC);

    if (mode == "PUSH") {
        return `${inv1}.pushItems(peripheral.getName(${inv2}), ${inv1slot}, ${limit}, ${inv2slot})\n`
    } else {
        return `${inv1}.pullItems(peripheral.getName(${inv2}), ${inv2slot}, ${limit}, ${inv1slot})\n`
    }
};