
    (8i                        d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZmZmZ d dlmZ  e j*                  e      Z e
d	d
g      Zej3                  dddeddideddeddddddddddddiiiidddddd iiid!"       ee      fd#ed$efd%       Zej7                  d&d'd(edd)id*eddeddd+ddddd,d-d.d/d0d1ddiiiii"       ed       ee      fd2ee   d$efd3       Zy)4    N)get_sqlserver_db)AsyncSession)	UserLogin)AuthService)	APIRouterDependsHeaderHTTPExceptionstatus)build_success_payloadSuccessResponseErrorResponse)Optionalz/authu   Autenticação)prefixtagsz/loginzRealizar loginu  
Realiza autenticação do usuário e retorna o token do cliente associado.

**Fluxo:**
1. Valida email e senha do usuário na tabela `dbo.Usuario` (SQL Server)
2. Busca o cliente associado ao usuário na tabela `dbo.Cliente` (SQL Server)
3. Retorna o token do cliente como `access_token`

**Tabelas consultadas:**
- `dbo.Usuario` (SQL Server) - validação de credenciais
- `dbo.Cliente` (SQL Server) - busca do token do cliente

**Exemplo de uso:**
```bash
curl -X POST 'http://localhost:8000/auth/login' \
  -H 'Content-Type: application/json' \
  -d '{"email": "usuario@example.com", "senha": "senha123"}'
```

**Resposta de sucesso:**
```json
{
  "access_token": "token_do_cliente",
  "token_type": "bearer"
}
```
descriptionLogin realizado com sucessou   Credenciais inválidas)r   modelzErro interno)   i  i  200contentzapplication/jsonexampletoken_do_clientebearer)access_token
token_typez2025-01-01T12:00:00Z)messagedata	timestampzusuario@example.comsenha123)emailsenha)	responsesrequestBody)summaryr   response_modelr#   openapi_extrar   dbc                   K   t         j                  d| j                          	 t        j                  || j                  | j
                         d {   }t         j                  d| j                          t        |d      S 7 3# t        $ r  t        $ r }t         j                  d| d        d }~ww xY ww)	Nz(Iniciando processo de login para email: )r(   r!   r"   z(Login realizado com sucesso para email: r   r   r   zErro ao processar login: Texc_info)
loggerinfor!   r   loginr"   r   r
   	Exceptionerror)r   r(   
token_dataes       '/srv/www/app-alerta/controllers/auth.pyr/   r/      s     J KK:4::,GH&,,****
 

 	>tzzlKL$1
 	

   04tDs:   #C /B B	2B C 	B B=B88B==C z/meu*   Obter informações do cliente autenticadou  
Retorna informações do cliente autenticado baseado no token fornecido.

**Autenticação:**
- Header: `Authorization: Bearer <token>`
- O token deve ser o token do cliente retornado no login

**Tabela consultada:**
- `dbo.Cliente` (SQL Server) - busca informações do cliente pelo token

**Exemplo de uso:**
```bash
curl -X GET 'http://localhost:8000/auth/me' \
  -H 'Authorization: Bearer <token>'
```

**Resposta de sucesso:**
```json
{
  "message": "Informações do cliente obtidas com sucesso",
  "data": {
    "nome": "Nome Fantasia ou Razão Social",
    "telefone": "1234567890",
    "celular": "9876543210",
    "email": "email@example.com"
  },
  "timestamp": "2025-01-01T12:00:00Z"
}
```
u   Informações do clienteu   Token inválido ou ausenter#   ,   Informações do cliente obtidas com sucessou   Nome Fantasia ou Razão Social
1234567890
9876543210zemail@example.comnometelefonecelularr!   Authorizationc                   K   t         j                  d       | 0t         j                  d       t        t        j
                  d      	 | j                  dd      j                         }	 t        j                  ||       d {   }|j                  d	      xs |j                  d
      }||j                  d      |j                  d      |j                  d      d}t         j                  d       t        |d      S # t        $ r8}t         j                  d|        t        t        j
                  d      d }~ww xY w7 # t        $ r  t        $ r }t         j                  d| d        d }~ww xY ww)Nu-   Buscando informações do cliente autenticadou   Token não enviado)status_codedetailzBearer  zErro ao extrair token: u   Formato de token inválido)r(   tokenNomeFantasiaRazaoSocialTelefoneCelularEmailOperacionalr8   r5   r*   u(   Erro ao obter informações do cliente: Tr+   )r-   r.   warningr
   r   HTTP_401_UNAUTHORIZEDreplacestripr0   r   get_current_clientegetr   r1   )r<   r(   rA   r3   cliente_dictr9   r   s          r4   merN   l   so    @ KK?@+,44'
 	


%%i4::<(<<%PP/R<3C3CM3R$((4#''	2!%%&89	
 	BC$B
 	
'  
04544/
 	

 Q    ?sCdSs[   AF  D ,E E	A=E F 	E3EEF 	E E=E88E==F )loggingcore.databaser   sqlalchemy.ext.asyncior   schemas.authr   services.authr   fastapir   r   r	   r
   r   core.api_responsesr   r   r   typingr   	getLogger__name__r-   routerpostr/   rL   strrN        r4   <module>r^      s    * / " % E E T T 			8	$	
	

 6 #:;5N+mD &!'D0B.6% *@$	)
" "!6!+ %	
#I  @F /0
C@B2 	8< #789MR+mD 	&!'U(H,8+7)<	% *@	$)
O  ;z $*$</0+C=++y;x+r]   