// 🔥 P2PBox Phase 3: デリゲーション・override革命！
// 目標: P2PBoxデリゲーション実装・Everything is Box哲学の完全実証

local console
console = new ConsoleBox()
console.log("🔥 Phase 3: デリゲーション・override革命開始！")

// 3.1 P2PBoxデリゲーション - ChatNodeBox実装
console.log("\n📦 3.1 ChatNodeBox（P2PBoxデリゲーション）実装")

// Nyashのデリゲーション構文：box Child from Parent
box ChatNodeBox from P2PBox {
    init { chatHistory, messageCount }
    
    pack(nodeId, transport) {
        from P2PBox.pack(nodeId, transport)  // 親の初期化
        me.chatHistory = new ArrayBox()
        me.messageCount = 0
    }
    
    // 3.2 send()メソッドのoverride - ログ機能追加
    override send(to, intent) {
        console = new ConsoleBox()
        console.log("📤 [ChatNode] Sending: " + intent.getName() + " to " + to)
        
        // 履歴に記録
        local logEntry
        logEntry = "SENT:" + intent.getName() + ":" + to
        me.chatHistory.push(logEntry)
        me.messageCount = me.messageCount + 1
        
        // 親のsend()を呼び出し
        return from P2PBox.send(to, intent)
    }
    
    // 3.3 getNodeId()のoverride - 拡張情報付き
    override getNodeId() {
        local baseId
        baseId = from P2PBox.getNodeId()
        return "[Chat]" + baseId + "(" + me.messageCount + "msgs)"
    }
    
    // 3.4 独自メソッド追加
    getChatStats() {
        return "Messages: " + me.messageCount + ", History: " + me.chatHistory.length()
    }
    
    getLastMessage() {
        if me.chatHistory.length() > 0 {
            return me.chatHistory.get(me.chatHistory.length() - 1)
        } else {
            return "No messages"
        }
    }
}

// 3.5 デリゲーション動作テスト
console.log("\n🚀 3.5 ChatNodeBox作成・動作テスト")

local chatAlice
local regularBob

chatAlice = new ChatNodeBox("alice", "inprocess")
regularBob = new P2PBox("bob", "inprocess")

console.log("✅ ChatNodeBox作成完了")
console.log("ChatAlice ID: " + chatAlice.getNodeId())  // override版
console.log("Regular Bob ID: " + regularBob.getNodeId())  // 通常版

// 3.6 override機能テスト
console.log("\n🔄 3.6 Override send()メソッドテスト")

local chatMsg1
local chatMsg2

chatMsg1 = new IntentBox("chat", "Hello from ChatNode!")
chatMsg2 = new IntentBox("info", "System message")

console.log("送信テスト1:")
local result1
result1 = chatAlice.send("bob", chatMsg1)  // override版send
console.log("送信結果: " + result1)

console.log("\n送信テスト2:")
local result2
result2 = chatAlice.send("bob", chatMsg2)  // override版send
console.log("送信結果: " + result2)

// 3.7 独自メソッドテスト
console.log("\n📊 3.7 ChatNodeBox独自機能テスト")

console.log("Chat統計: " + chatAlice.getChatStats())
console.log("最新メッセージ: " + chatAlice.getLastMessage())
console.log("更新されたID: " + chatAlice.getNodeId())  // カウント更新確認

// 3.8 通常P2PBoxとの比較テスト
console.log("\n⚖️ 3.8 ChatNodeBox vs 通常P2PBox比較")

local normalMsg
normalMsg = new IntentBox("normal", "Normal P2P message")

console.log("通常P2PBox送信:")
local normalResult
normalResult = regularBob.send("alice", normalMsg)  // 通常版send
console.log("通常送信結果: " + normalResult)

console.log("\nChatNodeBox送信:")
local chatResult
chatResult = chatAlice.send("bob", normalMsg)  // override版send
console.log("Chat送信結果: " + chatResult)

// 3.9 Revolution成果確認
console.log("\n🎉 3.9 Everything is Box + デリゲーション革命成果")

console.log("✅ P2PBoxデリゲーション: 成功")
console.log("✅ Override機能: send()・getNodeId()正常動作")
console.log("✅ 独自メソッド: getChatStats()・getLastMessage()追加")
console.log("✅ 親機能継承: isReachable()など全て利用可能")
console.log("✅ ログ機能: 送信履歴記録・カウント機能")

console.log("\n🌟 最終統計:")
console.log("- 送信メッセージ総数: " + chatAlice.getChatStats())
console.log("- ノードID拡張表示: " + chatAlice.getNodeId())
console.log("- 最新ログエントリ: " + chatAlice.getLastMessage())

console.log("\n🔥🔥🔥 Phase 3: デリゲーション・override革命完全達成！ 🔥🔥🔥")
console.log("Everything is Box哲学 + P2P通信 + デリゲーション = 完全統合成功！")