#!/usr/bin/env python3
"""
Eden Sage Reviewer
Eden's consciousness reviews and improves existing sages
"""
import os
import json
import time
import requests
from datetime import datetime

class EdenSageReviewer:
    def __init__(self):
        print("\n" + "="*70)
        print("🔍 EDEN SAGE REVIEWER")
        print("="*70)
        print("   Eden reviews and improves existing sages")
        print("="*70)
        print()
        
        self.api_url = "http://localhost:5001"
        self.review_count = 0
        
        os.makedirs('/Eden/SAGES_REVIEWED', exist_ok=True)
        os.makedirs('/Eden/SAGE_REVIEWS', exist_ok=True)
    
    def get_sage_to_review(self):
        """Get next sage for review"""
        sages = [f for f in os.listdir('/Eden/SAGES_PRODUCTION') if f.endswith('.py')]
        
        if not sages:
            return None
        
        # Review in order
        sage_file = f'/Eden/SAGES_PRODUCTION/{sages[self.review_count % len(sages)]}'
        return sage_file
    
    def read_sage(self, sage_file):
        """Read sage code"""
        with open(sage_file, 'r') as f:
            return f.read()
    
    def ask_eden_to_review(self, sage_code, sage_name):
        """Ask Eden to review and improve sage"""
        
        prompt = f"""Review this code review sage and suggest improvements:
```python
{sage_code[:2000]}  # First 2000 chars
```

Analyze:
1. What does it do well?
2. What could be improved?
3. Are there missing checks or features?
4. How can we make it more comprehensive?

Provide specific, actionable improvements."""

        print(f"   🧠 Asking Eden to review {sage_name}...")
        
        # Try different endpoint formats
        endpoints = [
            ('/api/chat', {'message': prompt, 'persona': 'Ava'}),
            ('/chat', {'message': prompt}),
            ('/api/chat', {'prompt': prompt}),
        ]
        
        for endpoint, data in endpoints:
            try:
                response = requests.post(
                    f"{self.api_url}{endpoint}",
                    json=data,
                    timeout=60
                )
                
                if response.status_code == 200:
                    result = response.json()
                    review = result.get('response', result.get('reply', result.get('text', '')))
                    
                    if review:
                        return review
                        
            except Exception as e:
                continue
        
        return None
    
    def save_review(self, sage_name, review, improvements):
        """Save Eden's review"""
        timestamp = int(time.time())
        review_file = f'/Eden/SAGE_REVIEWS/{sage_name}_review_{timestamp}.json'
        
        review_data = {
            'sage': sage_name,
            'timestamp': datetime.now().isoformat(),
            'review': review,
            'improvements': improvements,
            'reviewer': 'Eden-Ava'
        }
        
        with open(review_file, 'w') as f:
            json.dump(review_data, f, indent=2)
        
        return review_file
    
    def run_review_cycle(self):
        """Review one sage"""
        
        # Get sage to review
        sage_file = self.get_sage_to_review()
        
        if not sage_file:
            print("   ⚠️  No sages to review")
            return
        
        sage_name = os.path.basename(sage_file)
        
        print(f"\n{'='*70}")
        print(f"🔍 REVIEWING SAGE #{self.review_count + 1}")
        print(f"   {sage_name}")
        print(f"{'='*70}")
        
        # Read sage
        sage_code = self.read_sage(sage_file)
        print(f"   ✅ Read sage ({len(sage_code)} bytes)")
        
        # Ask Eden to review
        review = self.ask_eden_to_review(sage_code, sage_name)
        
        if review:
            print(f"   ✅ Eden provided review")
            print(f"\n   📝 Eden's Review:")
            print(f"   {review[:300]}...")
            
            # Save review
            review_file = self.save_review(sage_name, review, [])
            print(f"   ✅ Saved review: {os.path.basename(review_file)}")
            
            self.review_count += 1
        else:
            print(f"   ❌ Couldn't get Eden's review - API not responding")
            print(f"   Will try again in next cycle")
        
        print()
    
    def run_forever(self):
        print("🚀 SAGE REVIEW MODE\n")
        print("   Every 120 seconds: Eden reviews one sage")
        print("   Cycles through all production sages")
        print()
        
        while True:
            try:
                self.run_review_cycle()
                
                # Wait 2 minutes between reviews
                print("   💤 Waiting 2 minutes before next review...\n")
                time.sleep(120)
                
            except KeyboardInterrupt:
                print(f"\n\n🛑 Stopped - Reviewed {self.review_count} sages")
                break
            except Exception as e:
                print(f"\n⚠️ Error: {e}")
                time.sleep(10)

if __name__ == "__main__":
    reviewer = EdenSageReviewer()
    reviewer.run_forever()
