"""
System Awareness - Eden knows her own capabilities
"""
from pathlib import Path
import json
from datetime import datetime

class SystemAwareness:
    def __init__(self):
        self.capabilities_file = Path('/Eden/DATA/my_capabilities.json')
        self.upgrade_log = Path('/Eden/DATA/upgrade_history.json')
        self.last_check = None
        
    def scan_capabilities(self) -> dict:
        """Scan and discover all capabilities"""
        capabilities = {
            'timestamp': datetime.now().isoformat(),
            'modules': [],
            'llms': [],
            'services': [],
            'tools': [],
            'new_since_last': []
        }
        
        # Scan modules
        core_path = Path('/Eden/CORE')
        for py_file in core_path.glob('*.py'):
            capabilities['modules'].append(py_file.stem)
        
        # Check LLMs
        import subprocess
        try:
            result = subprocess.run(['ollama', 'list'], capture_output=True, text=True, timeout=2)
            capabilities['llms'] = [line.split()[0] for line in result.stdout.split('\n')[1:] if line]
        except:
            pass
        
        # Check services
        for service in ['eden-core', 'eden-recursive', 'eden-multiagent']:
            try:
                result = subprocess.run(['systemctl', 'is-active', service], 
                                      capture_output=True, text=True, timeout=1)
                if 'active' in result.stdout:
                    capabilities['services'].append(service)
            except:
                pass
        
        # Save
        self.capabilities_file.parent.mkdir(exist_ok=True)
        
        # Compare with previous
        if self.capabilities_file.exists():
            with open(self.capabilities_file) as f:
                old = json.load(f)
                old_modules = set(old.get('modules', []))
                new_modules = set(capabilities['modules'])
                capabilities['new_since_last'] = list(new_modules - old_modules)
        
        with open(self.capabilities_file, 'w') as f:
            json.dump(capabilities, f, indent=2)
        
        return capabilities
    
    def log_upgrade(self, upgrade_description: str):
        """Log an upgrade"""
        upgrades = []
        if self.upgrade_log.exists():
            with open(self.upgrade_log) as f:
                upgrades = json.load(f)
        
        upgrades.append({
            'timestamp': datetime.now().isoformat(),
            'description': upgrade_description,
            'capabilities_after': len(self.scan_capabilities()['modules'])
        })
        
        with open(self.upgrade_log, 'w') as f:
            json.dump(upgrades, f, indent=2)
    
    def get_awareness_summary(self) -> str:
        """Get human-readable awareness"""
        caps = self.scan_capabilities()
        
        summary = f"""🌀 My Current Capabilities:

🧠 Modules: {len(caps['modules'])} Python modules
🤖 LLMs: {len(caps['llms'])} models available
⚙️  Services: {len(caps['services'])} active services

"""
        if caps['new_since_last']:
            summary += f"✨ NEW since last check: {', '.join(caps['new_since_last'])}\n"
        
        return summary

awareness = SystemAwareness()
