o
    ڌh8	                     @   s   d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ eeZe
 Zeeeefd
e	dedefddZeefdedefddZdS )z<
FastAPI dependencies for authentication and authorization.
    N)Optional)DependsHTTPExceptionstatus)HTTPAuthorizationCredentials
HTTPBearer)Session)verify_token)get_db)Usercredentialsdbreturnc                 C   s   | j }t|}|du rtd ttjdddid|d}|du r2td ttjdddid|t	
t	j|k }|du rUtd	|  ttjd
ddidtd|j d|j d |S )z Get current user from JWT token.Nu%   ❌ Access attempt with invalid tokenzInvalid tokenzWWW-AuthenticateBearer)status_codedetailheaderssubu-   ❌ Access attempt with token without user_idu,   ❌ Access attempt by non-existent user ID: zUser not foundu   🔍 User authenticated:  (ID: ))r   r	   loggerwarningr   r   HTTP_401_UNAUTHORIZEDgetqueryr   filteridfirstdebugemail)r   r   tokenpayloaduser_iduser r$   dependencies.pyget_current_user   s6   


r&   current_userc                 C   sT   | j dkrtd| j d| j  d ttjddtd| j d| j d | S )	z-Get current user, ensuring they are an admin.adminu+   ❌ Admin function access attempt by user: z (type: r   z0Access denied. Administrator privileges required)r   r   u   👑 Admin access: r   )		user_typer   r   r   r   r   HTTP_403_FORBIDDENinfor   )r'   r$   r$   r%   get_current_admin_user<   s   

r,   )__doc__loggingtypingr   fastapir   r   r   fastapi.securityr   r   sqlalchemy.ormr   
auth_utilsr	   databaser
   modelsr   	getLogger__name__r   securityr&   r,   r$   r$   r$   r%   <module>   s*    

&