
    (8i}                     l    d dl Z d dlmZ d dlmZmZ d dlmZ  e j                  e	      Z
 G d d      Zy)    N)crud)HTTPExceptionstatus)AsyncSessionc            	       L    e Zd Zededededefd       Zedededefd       Zy)	AuthServicedbemailsenhareturnc                   K   t         j                  d|        	 t        j                  | |       d{   }|s3t         j	                  d|        t        t        j                  d      |j                  d      }|r||k7  r3t         j	                  d|        t        t        j                  d      |j                  d      }|s0t         j	                  d	       t        t        j                  d	      t        j                  | |       d{   }|s3t         j	                  d
|        t        t        j                  d      |j                  d      }|s4t         j	                  d| d       t        t        j                  d      t         j                  d|        |ddS 7 7 # t
        $ r  t        $ r:}t         j                  d| d       t        t        j                  d      d}~ww xY ww)u  
        Realiza login do usuário e retorna o token do cliente associado.
        
        Args:
            db: Sessão do banco de dados
            email: Email do usuário
            senha: Senha do usuário
            
        Returns:
            dict com access_token e token_type
            
        Raises:
            HTTPException: Se credenciais inválidas ou cliente não encontrado
        zIniciando login para email: Nu%   Usuário não encontrado para email: zAcesso negadostatus_codedetailSenhau   Senha inválida para email: 	IdClienteu&   Usuário não possui cliente associadou!   Cliente não encontrado para ID: u   Cliente não encontradoTokenzCliente u    não possui tokenu   Cliente não possui tokenz(Login realizado com sucesso para email: bearer)access_token
token_typezErro ao realizar login: Texc_infozErro interno ao processar login)loggerinfor   get_user_by_emailwarningr   r   HTTP_401_UNAUTHORIZEDgetget_cliente_by_id	ExceptionerrorHTTP_500_INTERNAL_SERVER_ERROR)	r	   r
   r   	user_dict
senha_hash
id_clientecliente_dicttoken_clientees	            $/srv/www/app-alerta/services/auth.pyloginzAuthService.login
   s    ( 	25':;;	"44R??I!FugNO# & < <* 
 #w/J*!4!=eWEF# & < <* 
 #{3J!GI# & < <C 
 "&!7!7J!GGL!B:,OP# & < <4 
 ),,W5M *5GHI# & < <6 
 KKB5'JK -& ] @6 H0  	 	LL3A37$LG"AA8 	sL   HF9 F4C F9 F7BF9 3H4F9 7F9 9H5H  HHtokenc                 |  K   t         j                  d       	 t        j                  | |       d{   }|s0t         j	                  d       t        t        j                  d      |S 7 8# t
        $ r  t        $ r:}t         j                  d| d       t        t        j                  d      d}~ww xY ww)	uV  
        Busca cliente pelo token fornecido.
        
        Args:
            db: Sessão do banco de dados
            token: Token do cliente
            
        Returns:
            Dicionário com dados do cliente encontrado
            
        Raises:
            HTTPException: Se token inválido ou cliente não encontrado
        zBuscando cliente por tokenNu"   Token inválido ou não encontrador   z"Erro ao buscar cliente por token: Tr   zErro interno ao validar token)r   debugr   get_cliente_by_tokenr   r   r   r   r    r!   r"   )r	   r+   r&   r(   s       r)   get_current_clientezAuthService.get_current_cliente]   s     $ 	12	!%!:!:2u!EELCD# & < <? 
   F  	 	LL=aSADLQ"AA6 	s8   B<A- A+7A- *B<+A- -B9?5B44B99B<N)	__name__
__module____qualname__staticmethodr   strdictr*   r/        r)   r   r   	   sm    PPP P 
	P Pd &&& 
& &r7   r   )logging	crud.authr   fastapir   r   sqlalchemy.ext.asyncior   	getLoggerr0   r   r   r6   r7   r)   <module>r=      s/      ) /			8	${ {r7   