from models import RoomMemberPermission, Room
from flask_login import current_user
from typing import Optional

def user_has_permission(room_id: int, permission_type: str, user_id: Optional[int] = None) -> bool:
    """
    Check if a user has a specific permission in a room.
    
    Args:
        room_id: The ID of the room to check permissions for
        permission_type: The type of permission to check (e.g., 'can_upload', 'can_download')
        user_id: Optional user ID (defaults to current user)
    
    Returns:
        bool: True if the user has the permission, False otherwise
    """
    if user_id is None:
        if not current_user.is_authenticated:
            return False
        user_id = current_user.id
    
    # Admins have all permissions
    if current_user.is_authenticated and current_user.is_admin:
        return True
    
    # Check room membership and permissions
    permission = RoomMemberPermission.query.filter_by(
        room_id=room_id,
        user_id=user_id
    ).first()
    
    if not permission:
        return False
    
    # Check if the specific permission is granted
    return getattr(permission, permission_type, False)

def get_user_permissions(room_id: int, user_id: Optional[int] = None) -> dict:
    """
    Get all permissions for a user in a room.
    
    Args:
        room_id: The ID of the room to get permissions for
        user_id: Optional user ID (defaults to current user)
    
    Returns:
        dict: Dictionary containing all permissions for the user
    """
    if user_id is None:
        if not current_user.is_authenticated:
            return {}
        user_id = current_user.id
    
    # Admins have all permissions
    if current_user.is_authenticated and current_user.is_admin:
        return {
            'can_upload': True,
            'can_download': True,
            'can_delete': True,
            'can_rename': True,
            'can_move': True,
            'can_share': True,
            'can_manage_members': True
        }
    
    # Get user's permissions
    permission = RoomMemberPermission.query.filter_by(
        room_id=room_id,
        user_id=user_id
    ).first()
    
    if not permission:
        return {}
    
    return {
        'can_upload': permission.can_upload,
        'can_download': permission.can_download,
        'can_delete': permission.can_delete,
        'can_rename': permission.can_rename,
        'can_move': permission.can_move,
        'can_share': permission.can_share,
        'can_manage_members': permission.can_manage_members
    } 