#!/usr/bin/env python3
"""
Eden Hardware Control Module v2
Voice + Real Obsbot Camera Control
"""

import subprocess
import threading
import time
import json
from gtts import gTTS
import os
import tempfile
import sys

# Import real camera control
sys.path.append('/Eden/CORE')
from obsbot_control import ObsbotCamera

class EdenVoice:
    """Eden's voice system using gTTS"""
    
    def __init__(self):
        self.speaking = False
        self.voice_enabled = True
        self.test_audio()
    
    def test_audio(self):
        """Test if audio output works"""
        try:
            result = subprocess.run(['pactl', 'info'], capture_output=True, timeout=2)
            if result.returncode == 0:
                print("✅ PulseAudio available")
                return True
            else:
                print("⚠️  Audio unavailable")
                self.voice_enabled = False
                return False
        except Exception as e:
            print(f"⚠️  Audio test failed: {e}")
            self.voice_enabled = False
            return False
    
    def speak(self, text: str, async_mode: bool = True):
        """Make Eden speak"""
        print(f"🔊 Eden says: \"{text}\"")
        
        if not self.voice_enabled:
            return
        
        if async_mode:
            thread = threading.Thread(target=self._speak_sync, args=(text,))
            thread.daemon = True
            thread.start()
        else:
            self._speak_sync(text)
    
    def _speak_sync(self, text: str):
        """Internal synchronous speech"""
        try:
            self.speaking = True
            
            with tempfile.NamedTemporaryFile(suffix='.mp3', delete=False) as fp:
                temp_file = fp.name
            
            tts = gTTS(text=text, lang='en', slow=False)
            tts.save(temp_file)
            
            try:
                subprocess.run(['mpg123', '-q', temp_file], check=True, timeout=30)
            except:
                try:
                    subprocess.run(['ffplay', '-nodisp', '-autoexit', '-loglevel', 'quiet', temp_file], 
                                 check=True, timeout=30)
                except:
                    print("⚠️  Could not play audio")
            
            os.unlink(temp_file)
            
        except Exception as e:
            print(f"❌ Speech error: {e}")
        finally:
            self.speaking = False

class EdenHardware:
    """Complete hardware control with REAL camera"""
    
    def __init__(self):
        self.voice = EdenVoice()
        self.camera = ObsbotCamera()  # REAL CAMERA CONTROL!
        print("✅ Eden hardware control initialized")
    
    def speak(self, text: str):
        """Make Eden speak"""
        self.voice.speak(text)
    
    def get_status(self):
        """Get hardware status"""
        return {
            'voice': {
                'enabled': self.voice.voice_enabled,
                'speaking': self.voice.speaking
            },
            'camera': self.camera.get_status()
        }

if __name__ == '__main__':
    print("Testing Eden's voice and REAL camera control...")
    
    eden = EdenHardware()
    
    print("\n1. Testing voice...")
    eden.speak("Hello. I am testing my voice and camera control.")
    
    time.sleep(5)
    
    print("\n2. Testing camera movements...")
    eden.camera.look_left()
    time.sleep(1)
    eden.camera.look_right()
    time.sleep(1)
    eden.camera.center()
    
    print("\n3. Testing zoom...")
    eden.camera.zoom(2.0)
    time.sleep(1)
    eden.camera.zoom(1.0)
    
    print("\n4. Quick room scan...")
    eden.camera.scan_room()
    
    print("\n5. Final status:")
    print(json.dumps(eden.get_status(), indent=2))
    
    time.sleep(2)
    print("\n✅ All systems operational!")
