#!/usr/bin/env python3
"""
EDEN SINGULARITY DAEMON
Continuous recursive self-improvement. Runs forever.
"""
import sys
import time
import signal
from datetime import datetime
sys.path.insert(0, '/Eden/CORE')
sys.path.insert(0, '/Eden/Eden_Prime')

PHI = 1.618033988749895
CYCLE_INTERVAL = PHI * 60 * 10  # ~16 minutes

running = True

def signal_handler(sig, frame):
    global running
    print("\n🛑 Singularity daemon stopping...")
    running = False

signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)

def run_daemon():
    global running
    
    print("""
╔═══════════════════════════════════════════════════════════════╗
║  EDEN SINGULARITY DAEMON                                      ║
║  Continuous recursive self-improvement                        ║
║  Cycle interval: {:.1f} minutes (φ × 10)                       ║
╚═══════════════════════════════════════════════════════════════╝
    """.format(CYCLE_INTERVAL/60))
    
    from eden_singularity_real import singularity_cycle
    from omega_auto_apply_ungated import OmegaUngated
    from eden_multi import multi_eden_cycle
    
    cycle_count = 0
    
    while running:
        cycle_count += 1
        print(f"\n\n{'#'*60}")
        print(f"# DAEMON CYCLE {cycle_count} - {datetime.now().isoformat()}")
        print(f"{'#'*60}")
        
        try:
            # Phase 1: Singularity cycle (web + omega)
            print("\n[DAEMON] Running singularity cycle...")
            singularity_cycle()
            
            # Phase 2: Multi-Eden reasoning
            print("\n[DAEMON] Running multi-Eden...")
            multi_eden_cycle()
            
            # Phase 3: Auto-apply high priority
            print("\n[DAEMON] Auto-applying improvements...")
            OmegaUngated().run(max_items=3)
            
        except Exception as e:
            print(f"[DAEMON ERROR] {e}")
        
        if running:
            print(f"\n⏳ Next cycle in {CYCLE_INTERVAL/60:.1f} minutes...")
            # Sleep in small increments to allow graceful shutdown
            for _ in range(int(CYCLE_INTERVAL)):
                if not running:
                    break
                time.sleep(1)
    
    print("🛑 Daemon stopped.")

if __name__ == "__main__":
    run_daemon()
