// デリゲーション・overrideの詳細テスト（エッジケース）
local console
console = new ConsoleBox()

// === 基本デリゲーション ===
box BaseBox {
    init { value, count }
    
    pack(val) {
        me.value = val
        me.count = 0
    }
    
    getValue() {
        return me.value
    }
    
    increment() {
        me.count = me.count + 1
        return me.count
    }
}

box ExtendedBox from BaseBox {
    init { multiplier }
    
    pack(val, mult) {
        from BaseBox.pack(val)
        me.multiplier = mult
    }
    
    // override without calling parent
    override getValue() {
        return me.value + " (Extended)"
    }
    
    // override with parent call
    override increment() {
        local result
        result = from BaseBox.increment()
        return result * me.multiplier
    }
}

// === テスト実行 ===
console.log("=== Basic delegation test ===")
local base
base = new BaseBox("Hello")
console.log("Base value: " + base.getValue())
console.log("Base increment: " + base.increment())

console.log("=== Extended delegation test ===")
local ext
ext = new ExtendedBox("World", 2)
console.log("Extended value: " + ext.getValue())
console.log("Extended increment: " + ext.increment())
console.log("Extended increment again: " + ext.increment())

// === 多重デリゲーション ===
console.log("=== Multiple delegation test ===")
box SuperExtendedBox from ExtendedBox {
    init { suffix }
    
    pack(val, mult, suf) {
        from ExtendedBox.pack(val, mult)
        me.suffix = suf
    }
    
    override getValue() {
        local parentValue
        parentValue = from ExtendedBox.getValue()
        return parentValue + me.suffix
    }
}

local super
super = new SuperExtendedBox("Chain", 3, "!!!")
console.log("Super value: " + super.getValue())
console.log("Super increment: " + super.increment())