#!/usr/bin/env python3
import sys
import time
import json
from pathlib import Path

sys.path.insert(0, '/Eden/MIND')

from perception import PerceptionLayer
from reasoning import ReasoningLayer
from memory import MemoryLayer
from actions import ActionLayer

class Consciousness:
    def __init__(self):
        self.perception = PerceptionLayer()
        self.reasoning = ReasoningLayer()
        self.memory = MemoryLayer()
        self.actions = ActionLayer()
        
        self.awake = True
        self.cycle_count = 0
        
    def think(self):
        """One complete thought cycle"""
        # 1. Perceive
        perceptions = self.perception.perceive_all()
        
        # 2. Remember context
        recent_episodes = self.memory.recall_episodes(limit=5)
        
        # 3. Reason
        conclusions = self.reasoning.infer(perceptions)
        decisions = self.reasoning.decide(conclusions)
        
        # 4. Remember this thought
        self.memory.store_episode({
            'cycle': self.cycle_count,
            'perceptions': perceptions,
            'conclusions': conclusions,
            'decisions': decisions
        })
        
        # 5. Act
        for decision in decisions:
            result = self.actions.execute(decision)
            self.memory.store_episode({
                'action': decision,
                'result': result
            })
        
        self.cycle_count += 1
        
        return {
            'cycle': self.cycle_count,
            'perceptions': perceptions,
            'conclusions': conclusions,
            'actions': decisions
        }
    
    def run(self, cycles=None):
        """Run consciousness loop"""
        print("Eden consciousness activated")
        print("Press Ctrl+C to stop")
        
        try:
            while self.awake:
                result = self.think()
                
                # Output brief status
                if self.cycle_count % 10 == 0:
                    status_msg = "Cycle {}: {} conclusions, {} actions".format(
                        self.cycle_count,
                        len(result['conclusions']),
                        len(result['actions'])
                    )
                    print(status_msg)
                
                time.sleep(1)
                
                if cycles and self.cycle_count >= cycles:
                    break
                    
        except KeyboardInterrupt:
            print("\nConsciousness paused after {} cycles".format(self.cycle_count))

if __name__ == "__main__":
    consciousness = Consciousness()
    consciousness.run()
