#!/usr/bin/env python3
"""
Launcher script for the Standalone Face Recognition Application
Checks dependencies and launches the appropriate version
"""
import sys
import subprocess
import os

def check_dependencies():
    """Check if required packages are installed"""
    required_packages = [
        'cv2',
        'numpy',
        'PIL',
        'customtkinter'
    ]
    
    missing_packages = []
    
    for package in required_packages:
        try:
            if package == 'cv2':
                import cv2
            elif package == 'PIL':
                from PIL import Image
            else:
                __import__(package)
        except ImportError:
            missing_packages.append(package)
    
    return missing_packages

def install_dependencies():
    """Install missing dependencies"""
    print("Installing required dependencies...")
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements_standalone.txt"])
        print("Dependencies installed successfully!")
        return True
    except subprocess.CalledProcessError as e:
        print(f"Failed to install dependencies: {e}")
        return False

def check_required_files():
    """Check if required files exist"""
    required_files = [
        "face_recognizer.yml",
        "user_data.json"
    ]
    
    missing_files = []
    
    for file in required_files:
        if not os.path.exists(file):
            missing_files.append(file)
    
    return missing_files

def main():
    """Main launcher function"""
    print("🚀 Standalone Face Recognition Application Launcher")
    print("=" * 50)
    
    # Check Python version
    if sys.version_info < (3, 8):
        print("❌ Error: Python 3.8 or higher is required")
        print(f"Current version: {sys.version}")
        return
    
    print(f"✅ Python version: {sys.version.split()[0]}")
    
    # Check dependencies
    print("\n🔍 Checking dependencies...")
    missing_packages = check_dependencies()
    
    if missing_packages:
        print(f"❌ Missing packages: {', '.join(missing_packages)}")
        print("Installing dependencies...")
        
        if not install_dependencies():
            print("❌ Failed to install dependencies. Please install manually:")
            print("pip install -r requirements_standalone.txt")
            return
        
        # Check again after installation
        missing_packages = check_dependencies()
        if missing_packages:
            print(f"❌ Still missing packages: {', '.join(missing_packages)}")
            return
    
    print("✅ All dependencies are available")
    
    # Check required files
    print("\n🔍 Checking required files...")
    missing_files = check_required_files()
    
    if missing_files:
        print(f"⚠️  Warning: Missing files: {', '.join(missing_files)}")
        print("The application may not work properly without these files.")
        print("Please ensure you have:")
        print("- face_recognizer.yml (trained model)")
        print("- user_data.json (user database)")
        
        response = input("\nContinue anyway? (y/N): ").lower()
        if response != 'y':
            print("Launch cancelled.")
            return
    else:
        print("✅ All required files found")
    
    # Choose version to launch
    print("\n🎯 Choose application version:")
    print("1. Basic Version (standalone_face_recognition.py)")
    print("2. Enhanced Version (standalone_face_recognition_enhanced.py) - RECOMMENDED")
    
    choice = input("\nEnter choice (1 or 2): ").strip()
    
    if choice == "1":
        app_file = "standalone_face_recognition.py"
    elif choice == "2":
        app_file = "standalone_face_recognition_enhanced.py"
    else:
        print("Invalid choice. Launching enhanced version...")
        app_file = "standalone_face_recognition_enhanced.py"
    
    # Check if app file exists
    if not os.path.exists(app_file):
        print(f"❌ Error: {app_file} not found!")
        return
    
    # Launch application
    print(f"\n🚀 Launching {app_file}...")
    print("=" * 50)
    
    try:
        # Change to script directory
        script_dir = os.path.dirname(os.path.abspath(__file__))
        os.chdir(script_dir)
        
        # Launch the application
        subprocess.run([sys.executable, app_file])
        
    except KeyboardInterrupt:
        print("\n\n👋 Application closed by user")
    except Exception as e:
        print(f"\n❌ Error launching application: {e}")
        print("Please check the error and try again.")

if __name__ == "__main__":
    main()



