#!/usr/bin/env python3
"""
Migration Script for Advanced Face Recognition App
Converts existing LBPH data to work with face_recognition (dlib) library
"""

import os
import json
import shutil
from pathlib import Path

def migrate_to_advanced():
    """Migrate existing data to work with advanced app"""
    print("🔄 Starting migration to Advanced Face Recognition App...")
    
    # Check if registered_faces directory exists
    if not os.path.exists("registered_faces"):
        print("❌ registered_faces directory not found!")
        print("Please ensure you have registered faces before migrating.")
        return False
    
    # Check if user_data.json exists
    if not os.path.exists("user_data.json"):
        print("❌ user_data.json not found!")
        print("Please ensure you have user data before migrating.")
        return False
    
    print("✅ Found existing data directories")
    
    # Create backup
    backup_dir = "backup_before_migration"
    if os.path.exists(backup_dir):
        shutil.rmtree(backup_dir)
    
    print(f"📦 Creating backup in {backup_dir}...")
    shutil.copytree("registered_faces", os.path.join(backup_dir, "registered_faces"))
    shutil.copy("user_data.json", os.path.join(backup_dir, "user_data.json"))
    
    if os.path.exists("face_recognizer.yml"):
        shutil.copy("face_recognizer.yml", os.path.join(backup_dir, "face_recognizer.yml"))
    
    print("✅ Backup created successfully")
    
    # Load user data
    try:
        with open("user_data.json", "r") as f:
            user_data = json.load(f)
        print(f"✅ Loaded {len(user_data)} users from user_data.json")
    except Exception as e:
        print(f"❌ Error loading user_data.json: {e}")
        return False
    
    # Verify face directories
    valid_users = 0
    for user_id, user_info in user_data.items():
        user_dir = os.path.join("registered_faces", user_id)
        if os.path.exists(user_dir):
            # Check if front directory has images
            front_dir = os.path.join(user_dir, "front")
            if os.path.exists(front_dir):
                images = [f for f in os.listdir(front_dir) 
                         if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
                if images:
                    valid_users += 1
                    print(f"✅ User {user_info.get('name', user_id)}: {len(images)} front images")
                else:
                    print(f"⚠️ User {user_info.get('name', user_id)}: No front images found")
            else:
                print(f"⚠️ User {user_info.get('name', user_id)}: No front directory")
        else:
            print(f"⚠️ User {user_id}: Directory not found")
    
    print(f"\n📊 Migration Summary:")
    print(f"Total users in user_data.json: {len(user_data)}")
    print(f"Users with valid face data: {valid_users}")
    print(f"Backup created in: {backup_dir}")
    
    if valid_users == 0:
        print("\n❌ No valid users found for migration!")
        print("Please ensure you have registered faces with front images before migrating.")
        return False
    
    print(f"\n🎯 Migration completed successfully!")
    print(f"Your data is ready for the Advanced Face Recognition App.")
    print(f"Run: python standalone_face_recognition_advanced.py")
    
    return True

def test_advanced_app():
    """Test if the advanced app can run"""
    print("\n🧪 Testing Advanced App compatibility...")
    
    try:
        import face_recognition
        print("✅ face_recognition library imported successfully")
    except ImportError as e:
        print(f"❌ face_recognition library not available: {e}")
        print("Please install: pip install face-recognition dlib")
        return False
    
    try:
        import customtkinter
        print("✅ customtkinter library imported successfully")
    except ImportError as e:
        print(f"❌ customtkinter library not available: {e}")
        print("Please install: pip install customtkinter")
        return False
    
    try:
        import cv2
        print("✅ OpenCV library imported successfully")
    except ImportError as e:
        print(f"❌ OpenCV library not available: {e}")
        print("Please install: pip install opencv-python")
        return False
    
    print("✅ All required libraries are available!")
    return True

if __name__ == "__main__":
    print("🚀 Advanced Face Recognition App Migration Tool")
    print("=" * 50)
    
    # Test compatibility first
    if not test_advanced_app():
        print("\n❌ Migration cannot proceed due to missing dependencies.")
        print("Please install all required libraries first.")
        exit(1)
    
    # Perform migration
    if migrate_to_advanced():
        print("\n🎉 Migration completed successfully!")
        print("You can now run the Advanced Face Recognition App:")
        print("python standalone_face_recognition_advanced.py")
    else:
        print("\n❌ Migration failed!")
        print("Please check the error messages above.")
    
    print("\nPress Enter to exit...")
    input()



