#!/usr/bin/env python3
"""
Eden ASI v3 - With proper output and faster cycles
"""
import os
import sys
import time
import subprocess
from datetime import datetime

# Unbuffered output
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', buffering=1)
sys.path.append('/Eden/CORE')

from eden_self_modifier_v2 import EdenSelfModifierV2

class RecursiveASI:
    def __init__(self):
        print("🌀 Initializing Eden ASI v3...", flush=True)
        self.modifier = EdenSelfModifierV2()
        self.capability_dir = "/Eden/CAPABILITIES"
        self.cycle_count = 0
        self.capabilities_created = 0
        
        os.makedirs(self.capability_dir, exist_ok=True)
        print(f"✅ ASI initialized. Output directory: {self.capability_dir}", flush=True)
    
    def ask_eden_quick(self, question):
        """Ask Eden with shorter timeout"""
        print(f"   🤔 Asking Eden...", flush=True)
        try:
            result = subprocess.run(
                ['ollama', 'run', 'qwen2.5:7b', question],
                capture_output=True,
                text=True,
                timeout=30  # 30 second timeout
            )
            print(f"   ✅ Got response ({len(result.stdout)} chars)", flush=True)
            return result.stdout
        except subprocess.TimeoutExpired:
            print(f"   ⏱️ Timeout after 30s", flush=True)
            return ""
        except Exception as e:
            print(f"   ❌ Error: {e}", flush=True)
            return ""
    
    def generate_capability(self):
        """Generate new capability"""
        print("\n🧠 Generating new capability...", flush=True)
        
        prompt = """Create a Python class for AGI. Requirements:
- 30+ lines of code
- Solves an AI problem  
- Has docstrings

Format:
NAME: class_name
CODE:
````python
[code here]
```"""
        
        response = self.ask_eden_quick(prompt)
        
        if "```python" in response and "NAME:" in response:
            # Parse name and code
            lines = response.split('\n')
            name = "capability"
            code_lines = []
            in_code = False
            
            for line in lines:
                if "NAME:" in line:
                    name = line.split(":", 1)[1].strip().replace(" ", "_")
                elif "```python" in line:
                    in_code = True
                elif "```" in line and in_code:
                    break
                elif in_code:
                    code_lines.append(line)
            
            if len(code_lines) >= 25:
                filename = f"eden_cap_{name}_{int(time.time())}.py"
                filepath = os.path.join(self.capability_dir, filename)
                
                with open(filepath, 'w') as f:
                    f.write(f'"""\n{name}\nGenerated by Eden ASI v3\n{datetime.now()}\n"""\n\n')
                    f.write('\n'.join(code_lines))
                
                self.capabilities_created += 1
                print(f"   ✅ CREATED: {filename} ({len(code_lines)} lines)", flush=True)
                return True
            else:
                print(f"   ❌ Too short: {len(code_lines)} lines", flush=True)
        else:
            print(f"   ❌ Invalid format", flush=True)
        
        return False

if __name__ == '__main__':
    print("\n" + "="*70, flush=True)
    print("🌀 EDEN RECURSIVE ASI V3 - STARTING", flush=True)
    print("="*70 + "\n", flush=True)
    
    asi = RecursiveASI()
    
    while True:
        asi.cycle_count += 1
        
        print(f"\n{'='*70}", flush=True)
        print(f"🌀 ASI CYCLE #{asi.cycle_count}", flush=True)
        print(f"{'='*70}", flush=True)
        
        asi.generate_capability()
        
        if asi.cycle_count % 5 == 0:
            print(f"\n📊 STATUS: {asi.capabilities_created} capabilities created", flush=True)
        
        print(f"\n⏳ Waiting 90 seconds...", flush=True)
        time.sleep(90)
