
    x h?                        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 d dl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 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/m0Z0 dd"l1m2Z2 d# Z3d dl4Z4d dl5Z5d 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l6Z6e'e)ed$                      Z7d dl&m'Z' d d%l*m+Z+m8Z8m9Z9 d d&l:m;Z; d dl5Z5d dl4Z4d dl<Z<d dl=Z=d d'l>m?Z?  e?e;j                  (      ZAe'd)        ZBd dlmZ ed*        ZCy)+    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(  rr|j                         }d|v rDt        |d         dkD  r3|d   d   d   d	   }t        j                  d
|  d|        |d   |d   fS t        j                  d|         	 yt        j                  d|j                   d|j                          	 y# t        $ r%}t        j                  d|  d|        Y d }~yd }~ww xY w)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/cagpublico/cag/projeto/views.pyobter_coordenadasr&      s\   K F88!45 AAQ@RRZ[kZlm23%89 <<$ 3&==?D T!c$z*:&;a&?":.q1*=mL8;-PQ"1~{1~55 RSYRZ[\  MMNxOcOcNddpqyq~q~p  A  B
   K;F82aSIJJKs$   B-C; 0C; 
/C; ;	D)D$$D)c           	         	 t          d|  d| }t        j                  |      }|j                  dk(  rK|j	                         }d|v r t        |d   t              r|d   d   S |d   S t        j                  d       	 yt        j                  d|j                   d|j                          	 y# t        $ r(}t        j                  d	|  d
| d|        Y d}~yd}~ww xY w)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   s   h#$JxjI;O<<$ 3&==?Dd"/9${:KT/RtK(+iX\]hXiiRS  MMPQYQeQePffrs{  tA  tA  sB  C  D
   hH
RTU^T__bcdbefgghs*   A B0 #B0 (B0 ?/B0 0	C!9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                  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) y0'#6Au8vww "(I6  ++77m, //((% ) 
 ())';<<    )schema_context)Informativoc                 T   t        | j                  d      rI| j                  j                  r3t        j                  | j                  j                  j
                         t        j                  j                         }t        d|       t        d      5  t        t        j                  j                  d      d d       }d d d        t        d       t        j                  j                  t!        j"                               }g }|D ]  }t%        j&                  d|j(                         }|s(|t!        j"                         j+                         d	z
  kD  sQ|j-                         j'                  d
      }|sst/               }	 |j                  j'                  |      }	|	| j                  k7  r@|	j                  | j                  j                  k(  r|j1                  d|	j2                  i        t7        | d|||d      S # 1 sw Y   HxY w# |j4                  $ r Y w xY w)Nr8   u   ▶️ Debug projetos:public-data_programada   u   ▶️ Debug informativos:expire_date__gteuser_activity_,  _auth_user_ididusernameprojeto/lista_projetos.html)projetosinformativoscurrently_online)hasattrr7   r8   r	   r:   r9   r   r;   allprintrB   r+   rC   order_bySessionfiltertimezonenowcacher   session_key	timestampget_decodedget_user_modelappendrO   DoesNotExistr   )
r=   rQ   rR   active_sessionsrS   sessionlast_activityuidUserr7   s
             r%   r5   r5   {   s    w||X&7<<+>+>gll11==>""$H 

"H- 
	! RK//889KLRaPQR	
&5 oo,,hlln,MO" 		N73F3F2G"HI]X\\^-E-E-G#-MM%%'++O<C%'<<++s+3Dw||+w||?R?R0R(//T]]0KL '8$,;  +R R" (( s   ,H	A+HHH'&H')r   r   c                    | j                   j                  rI| j                   j                  r3t        j                  | j                   j                  j
                         t        t        |      }|j                          t        d      S )NrM   r5   )
r7   is_authenticatedr8   r	   r:   r9   r   r   deleter   r=   
projeto_idr?   s      r%   deletar_projetorm      sc     ||$$)<)<gll11==>  J7G NN $%%rA   )r   r   c                     | j                   j                  rI| j                   j                  r3t        j                  | j                   j                  j
                         t        t        |      }t        | dd|i      S )NrM   zprojeto/detalhes_projeto.htmlr?   )	r7   ri   r8   r	   r:   r9   r   r   r   rk   s      r%   detalhes_projetoro      s`     ||$$)<)<gll11==>  J7G ':Y<PQQrA   r   c                     t        | d      S )Nzprojeto/sobre_este_app.htmlrp   r=   s    r%   sobre_este_apprs      s    '899rA   )rX   )rZ   )r`   )r\   c                    | j                   j                  r3t        j                  | j                   j                  j                         t
        j                  j                  t        j                               }g }|D ]   }t        j                  d|j                         }|s)t        j                         j                         dz
  }||kD  sT|j                         j                  d      }|svt               }	 |j                  j                  |      }|| j                   k7  rU|j                  | j                   j                  k(  r2|j!                  |j"                  |j                  j$                  d        t(        j                  j+                         }	t-        | d|	|d      S # |j&                  $ r Y Dw xY w)	NrH   rJ   rK   rL   rM   )rO   r8   rP   )rQ   rS   )r7   r8   r	   r:   r9   rX   r;   rY   rZ   r[   r\   r   r]   r^   r_   r`   ra   rO   namerb   r   rU   r   )
r=   rc   rS   rd   re   time_thresholdrf   rg   r7   rQ   s
             r%   r5   r5      ss   ||gll11==>oo,,hlln,MO" !		N73F3F2G"HI%\\^557#=N~-))+//@)+D!#||//3/77<</DKK7<<CVCV4V,33,0MM*.++*:*:5 !$ ""$H'8,;  	  ,, ! !s   B F22GGc                     t        | d      S )Nz projeto/assistente_grfgraph.htmlrp   rr   s    r%   assistente_grfgraph_viewrx      s    '=>>rA   )csrf_exempt)require_POST)JsonResponse)responder_pergunta_termo_iaresposta_fixa_se_houverresposta_coeficiente_paredebuscar_resposta_rapida)resposta_treinamento_aplicativoc                 P    dj                  d | j                  d      D              S )u/   Formata texto plano com 

 em parágrafos HTML. c              3   D   K   | ]  }d |j                          d  yw)z<p>z</p>N)strip).0pars     r%   	<genexpr>z%formatar_para_html.<locals>.<genexpr>  s     JsST*Js    z

)joinsplit)textos    r%   formatar_para_htmlr     s     77Jekk&6IJJJrA   c                 t   | j                   j                  r3t        j                  | j                   j                  j                         | j
                  j                  d      }|st        ddid      S d| j                  vrg | j                  d<   | j                  d   j                  d|d       d	| j                  _
        	 t        |      }|st        |      }|st        |      }|st        | | j                  d         }|t        k(  rt!        |      }| j                  d   j                  d|d       d	| j                  _
        	 d}|j'                         }|j'                         }t)        |dd      5 }|j+                  d       |j+                  |dz          |j+                  d       |j+                  |dz          d d d        t        d|i      S # t"        $ r}d
t%        |       }Y d }~d }~ww xY w# 1 sw Y   :xY w# t"        $ r!}t-        dt%        |              Y d }~bd }~ww xY w)Nmensagemr3   u   Mensagem não informada.i  )statuschat_historyr7   )rolecontentTz[Erro ao processar mensagem]: 	assistantzA/var/www/html/cagpublico/cag/projeto/perguntas_respostas_chat.txtazutf-8)encodingz
--- PERGUNTA ---

z--- RESPOSTA ---
u&   [ERRO AO SALVAR NO TXT DE HISTÓRICO] resposta)r7   r8   r	   r:   r9   r1   r   r{   rd   ra   modifiedr}   r   r~   r|   r   r   r   strr   openwriterV   )r=   r   r   r$   caminho_txtperguntaresposta_limpafs           r%   chat_assistente_viewr     s    ||gll11==>||
+HV%?@MMW__,*,'OON#**,   $GOO=*84-h7H28<H27GOON<[\H66)(3H
 OON#**,   $GOOAY>>#!)+sW5 	+GG*+GGHtO$GG()GGNT)*		+ X.//3  =3CF8<=	+ 	+  A6s1vh?@@AsJ   AG 0H =AHH 	G>&G99G>H
H 	H7H22H7)r{   HttpResponseBadRequestHttpResponse)settings)OpenAI)api_keyc                 r   | j                   dk7  rt        d      S 	 t        j                  | j                        }|j                  dd      j                         }|j                  dd      j                         }|r|st        d      S t        j                  dd|d d	       }| dt        j                         j                  d d
  d}d}t        j                  |d       t        j                  j                  ||      }t         j"                  j$                  j'                  dd|      }t)        |d      5 }	|	j+                  |j,                         d d d        t/        |j,                  d      S # 1 sw Y    xY w# t0        $ r*}
t3        dt5        |
             t        d      cY d }
~
S d }
~
ww xY w)Nr1   u   Método inválido.r   r   r   zTexto ou pergunta ausente.z\W+_2      z.mp3z6/var/www/html/cagpublico/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   r   resubuuiduuid4hexosmakedirspathr   clientaudiospeechr<   r   r   r   r   r   rV   r   )r=   r"   r   r   	nome_basenome_arquivocaminho_pastacaminho_completor!   r   r$   s              r%   
tts_openair     s   ~~%&:;; ?zz',,'"%++-88J+113H)*FGG FF63"6	#Adjjl&6&6r&:%;4@ Q
MD177<<|D <<&&-- . 
 "D) 	&QGGH$$%	& H,,<HH	& 	&
  ?%s1v.%&=>>?s=   A-F 
B2F <E7F 7F <F 	F6F1+F61F6c                 "   t        | j                  d      rI| j                  j                  r3t        j                  | j                  j                  j
                         t        j                  j                  d      d d }t        | dd|i      S )Nr8   rF   rG   z!projeto/informativos_section.htmlrR   )
rT   r7   r8   r	   r:   r9   rC   r;   rW   r   )r=   rR   s     r%   informativos_sectionr     s{     w||X&7<<+>+>gll11==> &&//0BCBQGL '>A  rA   )Dr   django.shortcutsr   r   r   modelsr   r   requests.utilsr   	django.dbr	   django.contrib.auth.decoratorsr
   r   r)   r&   r.   django.contribr/   r@   django_tenants.utilsrB   tenant_management.modelsrC   r5   rm   ro   rs   django.contrib.sessions.modelsrX   django.utilsrZ   django.contrib.authr`   django.core.cacher\   rx   django.views.decorators.csrfry   django.views.decorators.httprz   django.httpr{   agentr|   r}   r~   r   respostas_rapidasr   r   r   r   astr   r   r   django.confr   r   r   openair   OPENAI_API_KEYr   r   r    rA   r%   <module>r      s    @ @       9 6 > B0 . #    - #   9= =D ! / 0$ $N ! 8 & &  ! 6 
R 
R $:
 3 ! . 3 ! . 2 ! # . B ? ? 5 5 $   9  @K
 
  4 5 9 $   
:0   :0b 5 J J    	 	  	//	0$? $?P 1 rA   