o
    i0                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
m
Z
 d dlZd dlmZmZ d dlmZ d d	lmZ e	d
ZG dd dZdS )    )HTTPExceptionDependsHeader)
DictCursor)get_db_connection)timezone)datetimeN)CustomerResponse)CompanyService)EncryptionServicezAmerica/Sao_Pauloc                   @   s6   e Zd ZdefddZdefddZdefddZd	S )
CustomerControllercookiec                 C   s  zt dd |dD d }|stdtj|ddid}|d}|s(td	t|}|d
}|d}|d}|sBtdt|||gsMtdt	|t
sVtdt	|ttfsatdtj|td}	t|}
t }z;| }d}||||||
|	ttf |  W d    n1 sw   Y  tdd||d|	ddW |  W S |  w  ttjfy } ztdt
|dd }~w ty } ztd|  tdddd }~ww )Nc                 s   s(    | ]}| d r|dd V  qdS )zfgtsd_token==   N)
startswithsplit).0s r   /app/controllers/customer.py	<genexpr>   s   & z+CustomerController.store.<locals>.<genexpr>z; u8   O 'fgtsd_token' não foi encontrado na string de cookie.verify_signatureF)optionscnpju)   CNPJ da empresa não encontrado no token.zfgtsdigital.gov.br/ni_perfilzfgtsdigital.gov.br/nome_perfilexpu#   Empresa não cadastrada no sistema.u(   JWT inválido. Faltam campos essenciais.u!   CNPJ deve ser uma string válida.u5   Timestamp de expiração deve ser um número válido.)tza  
                            INSERT INTO customers 
                            (company_id, cnpj, name, cookie, expires_on, status, updated_at)
                            VALUES (%s, %s, %s, %s, %s, 'active', %s) 
                            ON CONFLICT (company_id, cnpj) DO UPDATE SET
                                name = EXCLUDED.name,
                                cookie = EXCLUDED.cookie,
                                expires_on = EXCLUDED.expires_on,
                                status = 'active',
                                updated_at = NOW(),
                                details = NULL;
                        successzCliente registrada com sucesso.createdr   nameaction
expires_onstatusmessagedatai  status_codedetailzErro inesperado no registro: i  z$Ocorreu um erro interno no servidor.)nextr   
ValueErrorjwtdecodegetr   Zget_company_id_by_cnpjall
isinstancestrintfloatr   fromtimestampSAO_PAULO_TZr   encrypt_datar   cursorexecutenowcommitr
   close
PyJWTErrorr   	Exceptionprint)selfr   fgtsd_token_strdecoded_tokencompany_cnpj
company_idr   r    exp_timestampexp_datetimeencrypted_cookieconncurqueryer   r   r   store   s^   








zCustomerController.storer   c                 C   s   t  }zC|jtd}|d|f | }W d    n1 s w   Y  |s.W |  d S t|}t|d |d< t	di |W |  S |  w )Ncursor_factoryz(SELECT * FROM customers WHERE cnpj = %s;r   r   )
r   r7   r   r8   fetchoner;   dictr   decrypt_datar	   r?   r   rG   rH   customerr   r   r   show[   s   
zCustomerController.showc              	   C   s   t  }zK|jtd6}|d|f | }|stddd|  tdd|d |d	 d
|d ddW  d    W |  S 1 sCw   Y  W |  d S |  w )NrL   z2DELETE FROM customers WHERE cnpj = %s RETURNING *;i  u%   Cliente não encontrado para remover.r'   r   zCliente removido com sucesso.r   r    Zdeletedr"   r   r#   )	r   r7   r   r8   rN   r   r:   r
   r;   rQ   r   r   r   deletek   s*   
zCustomerController.deleteN)__name__
__module____qualname__r1   rK   rS   rT   r   r   r   r   r      s    Gr   )fastapir   r   r   psycopg2.extrasr   utilsr   pytzr   r   r,   models.customerr	   r
   Zservices.companyr   services.encryptionr   r5   r   r   r   r   r   <module>   s    