
    {gW8                     l   d dl Z d dlmZmZmZ ddlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ dZd	Zd
 Zd 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mZ d dlmZ d dl
mZ d dlmZ ed             Zd dl
mZ ed             Zd dl
mZ d dlmZmZ ddlmZ ed             Zd dl
mZ d dlmZmZ ddlmZ ed             Zd dlmZ d 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 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 ed             Zed             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 ddl(m)Z)m*Z*m+Z+m,Z, dd l-m.Z. d! Z/e#e%ed"                                     Z0d dl"m#Z# d d#l&m'Z'm1Z1m2Z2 d d$l3m4Z4 d dl5Z5d dl6Z6d dl7Z7d dl8Z8d d%l9m:Z:  e:e4j;        &          Z<e#d'             Z=dS )(    N)renderredirectget_object_or_404   )Projeto)quote)
connection)login_required 3d8dccff4c994354a239d91df4427437z'https://api.open-meteo.com/v1/elevationc                 x   	 t          |  d          }d| dt           }t          j        d|            t	          j        |          }|j        dk    r|                                }d|v r]t          |d                   dk    rD|d         d         d         d	         }t          j        d
|  d|            |d         |d         fS t          j	        d|             n$t          j	        d|j         d|j
                    n1# t          $ r$}t          j        d|  d|            Y d }~nd }~ww xY wdS )Nz, Brasilz0https://api.geoapify.com/v1/geocode/search?text=z&apiKey=zURL enviada para Geoapify:    featuresr   geometrycoordinateszCoordenadas obtidas para z: r   u2   Não foram encontradas coordenadas para a cidade: u2   Erro ao acessar a API Geoapify: Código de status . Resposta: zErro ao obter coordenadas para )NN)r   GEOAPIFY_API_KEYlogginginforequestsgetstatus_codejsonlenerrortext	Exception	exception)cidadecidade_formatadaurlresponsedatacoordenadases          "/var/www/html/cag/projeto/views.pyobter_coordenadasr&      s   K F!4!4!455 nAQmm[kmm8388999 <$$ 3&&==??D T!!c$z*:&;&;a&?&?":.q1*=mLPPP;PPQQQ"1~{1~55[SY[[\\\\M  AxOc  A  Aqyq~  A  A  B  B  B K K KIFIIaIIJJJJJJJJK :s   C	D	 <D	 	
D7D22D7c           	         	 t            d|  d| }t          j        |          }|j        dk    r^|                                }d|v r1t          |d         t                    r|d         d         n|d         S t          j        d           n$t          j        d|j         d|j	                    n4# t          $ r'}t          j        d	|  d
| d|            Y d}~nd}~ww xY wdS )zf
    Usa a API Open-Meteo para obter a altitude com base nas coordenadas de latitude e longitude.
    z
?latitude=z&longitude=r   	elevationr   u2   Não foi possível obter a elevação da resposta.u4   Erro ao acessar a API Open-Meteo: Código de status r   z,Erro ao obter altitude para as coordenadas (z, z): N)OPEN_METEO_API_URLr   r   r   r   
isinstancelistr   r   r   r   r   )latitude	longituder    r!   r"   r$   s         r%   obter_altituder.   2   sI   h#OOxOOIOO<$$ 3&&==??Dd""/9${:KT/R/RitK(++X\]hXiiRSSSSM  CQYQe  C  Cs{  tA  C  C  D  D  D h h hfffU^ffcdffggggggggh 4s   A6B3 99B3 3
C$=CC$)r   r   )messagesc                    | j         dk    r| j        d         }| j        d         }t          |          \  }}||t          | dddi          S t	          ||          }| j        j        j        }t          j	        |           t          j                            |||||          }t          d          S t          | d	          S )
NPOSTnome_projetor   zprojeto/erro.htmlerrou2   Não foi possível obter as coordenadas da cidade.)r2   r   r,   r-   altitudelista_projetoszprojeto/cadastrar_projeto.html)methodr1   r&   r   r.   usertenantschema_namer	   
set_schemar   objectscreater   )requestr2   r   r,   r-   r4   tenant_schemaprojetos           r%   cadastrar_projetor@   T   s    ~|N3h' 077) y0'#6Au8vwww "(I66  +7m,,, /((% ) 
 
 ()))';<<<    c                     | j         j        r/| j         j        r#t          j        | j         j        j                   t          j                                        }t          | dd|i          S )Nprojeto/lista_projetos.htmlprojetos)
r7   is_authenticatedr8   r	   r:   r9   r   r;   allr   )r=   rD   s     r%   r5   r5   x   sa     |$ ?)< ?gl1=>>>""$$H'8:x:PQQQrA   )r   r   c                     | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }|                                 t          d          S )Nidr5   )
r7   rE   r8   r	   r:   r9   r   r   deleter   r=   
projeto_idr?   s      r%   deletar_projetorM      sm     |$ ?)< ?gl1=>>>  J777G NN $%%%rA   )r   r   c                     | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t          | dd|i          S )NrH   zprojeto/detalhes_projeto.htmlr?   )	r7   rE   r8   r	   r:   r9   r   r   r   rK   s      r%   detalhes_projetorO      sd     |$ ?)< ?gl1=>>>  J777G ':Y<PQQQrA   r   c                 "    t          | d          S )Nzprojeto/sobre_este_app.htmlrP   r=   s    r%   sobre_este_apprS      s    '8999rA   )Session)timezone)get_user_model)cachec                 "   | j         j        r#t          j        | j         j        j                   t
          j                            t          j	                              }g }|D ]}t          j        d|j                   }|rt          j	                                                    dz
  }||k    r|                                                    d          }|rt                      }	 |j                            |          }|| j         k    r<|j        | j         j        k    r'|                    |j        |j        j        d           # |j        $ r Y w xY wt(          j                                        }	t-          | d|	|d          S )	N)expire_date__gteuser_activity_i,  _auth_user_idrH   )usernamer8   rC   )rD   currently_online)r7   r8   r	   r:   r9   rT   r;   filterrU   nowrW   r   session_key	timestampget_decodedrV   appendr\   nameDoesNotExistr   rF   r   )
r=   active_sessionsr]   sessionlast_activitytime_thresholduidUserr7   rD   s
             r%   r5   r5      s   | ?gl1=>>>o,,hlnn,MMO" ! !	"H73F"H"HII 	!%\^^5577#=N~--))++//@@ 
!)++D!#|//3/777<//DK7<CV4V4V,33,0M*.+*:5 5     , ! ! ! ! ""$$H'8,; ;   s   +A"E
EEc                 "    t          | d          S )Nz projeto/assistente_grfgraph.htmlrP   rR   s    r%   assistente_grfgraph_viewrm      s    '=>>>rA   )csrf_exempt)require_POST)JsonResponse)responder_pergunta_termo_iaresposta_fixa_se_houverresposta_coeficiente_paredebuscar_resposta_rapida)resposta_treinamento_aplicativoc                 f    d                     d |                     d          D                       S )u/   Formata texto plano com 

 em parágrafos HTML. c              3   F   K   | ]}d |                                  dV  dS )z<p>z</p>N)strip).0pars     r%   	<genexpr>z%formatar_para_html.<locals>.<genexpr>   s6      JJs****JJJJJJrA   z

)joinsplit)textos    r%   formatar_para_htmlr      s/    77JJekk&6I6IJJJJJJrA   c                    | j         j        r#t          j        | j         j        j                   | j                            d          }|st          ddid          S d| j        vr
g | j        d<   | j        d         	                    d|d           d	| j        _
        	 t          |          }|st          |          }|st          |          }|st          | | j        d                   }|t          k    rt!          |          }n)# t"          $ r}d
t%          |           }Y d }~nd }~ww xY w| j        d         	                    d|d           d	| j        _
        t          d|i          S )Nmensagemr3   u   Mensagem não informada.i  )statuschat_historyr7   )rolecontentTz[Erro ao processar mensagem]: 	assistantresposta)r7   r8   r	   r:   r9   r1   r   rp   rg   rc   modifiedrr   rt   rs   rq   ru   r   r   str)r=   r   r   r$   s       r%   chat_assistente_viewr      s    | ?gl1=>>>|
++H NV%?@MMMMW_,,*,'ON#**, ,     $GO=*844 	8-h77H 	=28<<H 	]27GON<[\\H 666)(33H = = =<CFF<<= ON#**, ,     $GOX.///s   "A(D 
D1D,,D1)rp   HttpResponseBadRequestHttpResponse)settings)OpenAI)api_keyc                    | j         dk    rt          d          S 	 t          j        | j                  }|                    dd                                          }|                    dd                                          }|r|st          d          S t          j        dd|d d	                   }| dt          j
                    j        d d
          d}d}t          j        |d           t          j                            ||          }t           j        j                            dd|          }t)          |d          5 }	|	                    |j                   d d d            n# 1 swxY w Y   t/          |j        d          S # t0          $ r6}
t3          dt5          |
                     t          d          cY d }
~
S d }
~
ww xY w)Nr1   u   Método inválido.r   rw   perguntazTexto ou pergunta ausente.z\W+_2      z.mp3z+/var/www/html/cag/projeto/audios_gerados_iaT)exist_okztts-1echo)modelvoiceinputwbz
audio/mpeg)content_typeu   Erro ao gerar áudio:u   Erro ao gerar áudio.)r6   r   r   loadsbodyr   ry   resubuuiduuid4hexosmakedirspathr}   clientaudiospeechr<   openwriter   r   r   printr   )r=   r"   r   r   	nome_basenome_arquivocaminho_pastacaminho_completor!   fr$   s              r%   
tts_openair   b  s   ~%&:;;; ?z',''"%%++--88J++1133 	HH 	H)*FGGG F63"66	#@@djll&6rr&:@@@ F
MD11117<<|DD <&-- . 
 
 "D)) 	&QGGH$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& H,<HHHH ? ? ?%s1vv...%&=>>>>>>>>?sI   A;F B3F E2&F 2E66F 9E6:F 
G+GGG)>r   django.shortcutsr   r   r   modelsr   r   requests.utilsr   	django.dbr	   django.contrib.auth.decoratorsr
   r   r)   r&   r.   django.contribr/   r@   r5   rM   rO   rS   django.contrib.sessions.modelsrT   django.utilsrU   django.contrib.authrV   django.core.cacherW   rm   django.views.decorators.csrfrn   django.views.decorators.httpro   django.httprp   agentrq   rr   rs   rt   respostas_rapidasru   r   r   r   r   django.confr   r   r   r   r   openair   OPENAI_API_KEYr   r    rA   r%   <module>r      s    @ @ @ @ @ @ @ @ @ @                                9 9 9 9 9 9 6 >   B  0 . - - - - - - - # # # # # #                   - - - - - - - - # # # # # #             9 9 9 9 9 9= = =D !          R R R !           8 8 8 8 8 8 8 8      & & &  !           6 6 6 6 6 6 6 6      
R 
R 
R $ # # # # #: : :
 3 2 2 2 2 2 ! ! ! ! ! ! . . . . . . 3 2 2 2 2 2 ! ! ! ! ! ! . . . . . . 2 2 2 2 2 2 ! ! ! ! ! ! # # # # # # . . . . . .  B ? ? ? 5 4 4 4 4 4 5 5 5 5 5 5 $ $ $ $ $ $             9 9 9 9 9 9            @ ? ? ? ? ?K K K
 +0 +0   +0B 5 4 4 4 4 4 J J J J J J J J J J              				 				       	/	0	0	0$? $? $? $? $?rA   