"""
User document management utilities
Handles checking and retrieving user documents from Firestore
"""

from data.databases.firebase import db
from typing import Dict, Any, Optional, List
from datetime import datetime

def check_user_documents(user_email: str) -> Dict[str, Any]:
    """
    Check if a user has any documents in their collection
    
    Args:
        user_email: The email of the user to check
        
    Returns:
        Dictionary containing document information
    """
    try:
        user_docs = db.collection(user_email).document('Documents').get()
        
        if user_docs.exists:
            docs_dict = user_docs.to_dict()
            document_count = len(docs_dict) if docs_dict else 0
            
            return {
                'has_documents': document_count > 0,
                'document_count': document_count,
                'documents': docs_dict,
                'error': None
            }
        else:
            return {
                'has_documents': False,
                'document_count': 0,
                'documents': {},
                'error': None
            }
            
    except Exception as e:
        return {
            'has_documents': False,
            'document_count': 0,
            'documents': {},
            'error': str(e)
        }

def user_has_documents(user_email: str) -> bool:
    """Simple boolean check if user has any documents"""
    try:
        user_docs = db.collection(user_email).document('Documents').get()
        if user_docs.exists:
            docs_dict = user_docs.to_dict()
            return len(docs_dict) > 0 if docs_dict else False
        return False
    except Exception:
        return False

def get_user_document_list(user_email: str) -> List[Dict[str, Any]]:
    """Get formatted list of user documents"""
    result = check_user_documents(user_email)
    
    if not result['has_documents']:
        return []
    
    documents = []
    for doc_id, doc_info in result['documents'].items():
        documents.append({
            'id': doc_id,
            'filename': doc_info.get('filename', 'Unknown'),
            'upload_date': doc_info.get('load_date', datetime.now()),
            'metadata': doc_info
        })
    
    return sorted(documents, key=lambda x: x['upload_date'], reverse=True)

# Specific function for your use case
def check_kmyers_documents():
    """Check documents for kmyers@atomohealth.com"""
    user_email = "kmyers@atomohealth.com"
    result = check_user_documents(user_email)
    
    print(f"Checking documents for: {user_email}")
    print("-" * 50)
    
    if result['error']:
        print(f"❌ Error: {result['error']}")
        return result
    
    if result['has_documents']:
        print(f"✅ User has {result['document_count']} document(s)")
        for doc_id, doc_info in result['documents'].items():
            filename = doc_info.get('filename', 'Unknown')
            load_date = doc_info.get('load_date', 'Unknown')
            print(f"  - {doc_id}: {filename} (uploaded: {load_date})")
    else:
        print("❌ User has no documents")
    
    return result

if __name__ == "__main__":
    # Test the function
    check_kmyers_documents()