o
    i,                     @   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 e	d	ZG d
d dZdS )    )HTTPExceptionDependsHeader)
DictCursor)get_db_connection)timezone)datetimeN)CompanyResponse)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 )
CompanyControllercookiec                 C   s  zt dd |dD d }|stdtj|ddid}|d}|d	}|d
}t|||gs7tdt|ts@tdt|t	t
fsKtdtj|td}t|}t }	z:|	 }
d}|
|||||ttf |	  W d    n1 s~w   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/company.py	<genexpr>   s   & z*CompanyController.store.<locals>.<genexpr>z; u8   O 'fgtsd_token' não foi encontrado na string de cookie.verify_signatureF)optionscnpj	cnpj_nomeexpu(   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 companies (cnpj, name, cookie, expires_on, status, updated_at)
                        VALUES (%s, %s, %s, %s, 'active', %s) ON CONFLICT (cnpj) DO UPDATE SET
                            name = EXCLUDED.name, cookie = EXCLUDED.cookie,
                            expires_on = EXCLUDED.expires_on, status = 'active', updated_at = EXCLUDED.updated_at, details = NULL;
                    successzEmpresa 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getall
isinstancestrintfloatr   fromtimestampSAO_PAULO_TZr   encrypt_datar   cursorexecutenowcommitr
   close
PyJWTErrorr   	Exceptionprint)selfr   fgtsd_token_strdecoded_tokenr   r    exp_timestampexp_datetimeencrypted_cookieconncurqueryer   r   r   store   sR   






	zCompanyController.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 companies WHERE cnpj = %s;r   r   )
r   r7   r   r8   fetchoner;   dictr   decrypt_datar	   r?   r   rE   rF   companyr   r   r   showF   s   
zCompanyController.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 )NrJ   z2DELETE FROM companies WHERE cnpj = %s RETURNING *;i  u%   Empresa não encontrada para remover.r'   r   zEmpresa removida com sucesso.r   r    deletedr"   r   r#   )	r   r7   r   r8   rL   r   r:   r
   r;   rO   r   r   r   deleteV   s*   
zCompanyController.deleteN)__name__
__module____qualname__r1   rI   rQ   rS   r   r   r   r   r      s    4r   )fastapir   r   r   psycopg2.extrasr   utilsr   pytzr   r   r,   models.companyr	   r
   services.encryptionr   r5   r   r   r   r   r   <module>   s    