#!/usr/bin/env python3
"""
Check Users Script
This script helps verify the current state of registered users and their images.
"""

import os
import json

def check_user_images():
    """Check all registered users and their image counts"""
    print("=" * 80)
    print("REGISTERED USERS STATUS CHECK")
    print("=" * 80)
    
    face_dir = "registered_faces"
    if not os.path.exists(face_dir):
        print("❌ registered_faces directory not found!")
        return
    
    # Load user data
    user_data = {}
    if os.path.exists("user_data.json"):
        with open("user_data.json", "r") as f:
            user_data = json.load(f)
    
    total_images = 0
    active_users = 0
    
    for user_id in os.listdir(face_dir):
        user_folder = os.path.join(face_dir, user_id)
        if os.path.isdir(user_folder):
            # Count images recursively
            image_count = 0
            subdirs = []
            for root, dirs, files in os.walk(user_folder):
                for file in files:
                    if file.lower().endswith(('.jpg', '.jpeg', '.png')):
                        image_count += 1
                if root != user_folder:  # Don't include root
                    subdirs.extend(dirs)
            
            # Get user name
            user_name = user_data.get(str(user_id), {}).get('name', 'Unknown')
            
            # Status
            status = "🟢 Active" if image_count > 0 else "🔴 Inactive"
            if image_count > 0:
                active_users += 1
            
            total_images += image_count
            
            print(f"User ID: {user_id:>6} | Name: {user_name:<25} | Images: {image_count:>3} | Status: {status}")
            
            # Show subdirectory structure
            if subdirs:
                subdirs = list(set(subdirs))  # Remove duplicates
                print(f"           └─ Subdirectories: {', '.join(sorted(subdirs))}")
            
            # Show some sample files
            if image_count > 0:
                sample_files = []
                for root, dirs, files in os.walk(user_folder):
                    for file in files:
                        if file.lower().endswith(('.jpg', '.jpeg', '.png')):
                            rel_path = os.path.relpath(os.path.join(root, file), user_folder)
                            sample_files.append(rel_path)
                            if len(sample_files) >= 3:  # Show max 3 samples
                                break
                    if len(sample_files) >= 3:
                        break
                
                if sample_files:
                    print(f"           └─ Sample files: {', '.join(sample_files[:3])}")
            
            print()
    
    print("=" * 80)
    print(f"SUMMARY:")
    print(f"Total Users: {len(os.listdir(face_dir))}")
    print(f"Active Users: {active_users}")
    print(f"Total Images: {total_images}")
    print("=" * 80)

def check_model_status():
    """Check if the face recognition model exists and is valid"""
    print("\n" + "=" * 50)
    print("MODEL STATUS CHECK")
    print("=" * 50)
    
    model_file = "face_recognizer.yml"
    if os.path.exists(model_file):
        file_size = os.path.getsize(model_file)
        print(f"✅ Model file exists: {model_file}")
        print(f"   Size: {file_size:,} bytes")
        
        if file_size > 1000:  # Basic size check
            print("   Status: Model appears valid")
        else:
            print("   ⚠️  Warning: Model file seems too small")
    else:
        print("❌ Model file not found: face_recognizer.yml")
        print("   You need to train the model first!")

def check_attendance_log():
    """Check attendance log status"""
    print("\n" + "=" * 50)
    print("ATTENDANCE LOG CHECK")
    print("=" * 50)
    
    log_file = "attendance_log.csv"
    if os.path.exists(log_file):
        with open(log_file, 'r') as f:
            lines = f.readlines()
        
        if len(lines) > 1:  # Has data beyond header
            print(f"✅ Attendance log exists with {len(lines)-1} records")
            print(f"   Last few entries:")
            for line in lines[-3:]:  # Show last 3 entries
                if line.strip():
                    print(f"   {line.strip()}")
        else:
            print("⚠️  Attendance log exists but has no data")
    else:
        print("❌ Attendance log not found: attendance_log.csv")

if __name__ == "__main__":
    check_user_images()
    check_model_status()
    check_attendance_log()
    
    print("\n" + "=" * 80)
    print("RECOMMENDATIONS:")
    print("=" * 80)
    
    if not os.path.exists("face_recognizer.yml"):
        print("1. 🚨 Train the face recognition model first!")
        print("   Run: python improve_accuracy.py")
        print("   Select option 3: Retrain the model")
    
    print("2. 📸 If users show 0 images, they need to register faces")
    print("   Run: python improve_accuracy.py")
    print("   Select option 2: Collect better training data")
    
    print("3. 🔄 After collecting new data, retrain the model")
    print("   Run: python improve_accuracy.py")
    print("   Select option 3: Retrain the model")
    
    print("4. 🧪 Test recognition accuracy")
    print("   Run: python improve_accuracy.py")
    print("   Select option 4: Test recognition accuracy")



