
    Th'                        d Z ddlZddlZddl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  e	e          j        j        dz  Ze                    d           dedefdZdedee         fdZdedefdZdedefdZd dededefdZd dededefdZd dededefdZ dee         fdZ!d dededefdZ"dS )!u1   
Funcții helper și utilitare pentru Page Asist
    N)ListDict)datetime)Path)Document)RGBColorPt)WD_PARAGRAPH_ALIGNMENT   )ConversationDBconversationsT)exist_oksreturnc                 ~    |                                  } t          j        dd|                                           } | S )u#   Normalizare text pentru comparațiez\s+ )lowerresubstrip)r   s    IC:\Users\bruma\Desktop\Web_Page_Asist_App (1)\page_asist\backend\utils.py	norm_textr      s3    			A
vsA$$&&AH    textc                     t          j        d|           }g }|D ]9}t          |          }t          |          dk    r|                    |           :|S )u   
    Extrage fraze/idei din text pentru registru de unicitate
    Împarte pe punct/linie nouă/bullet și returnează fraze curate
    u   [.\n•\-\u2022;]+   )r   splitr   lenappend)r   chunksoutcts        r   extrage_fraze_ideir$      sY    
 X+T22F
C  aLLq66Q;;JJqMMMJr   rolc                 `    ddddd}|                     |                                 d          S )u.   Returnează codul hex al culorii pentru un rolz#10b981z#ef4444z#3b82f6z#f59e0b)	generatorcritic	moderatorsintetizatorz#6b7280)getr   )r%   colorss     r   get_role_color_hexr-   *   s:     !	 F ::ciikk9---r   	hex_colorc                 d                           d           t           fddD                       S )u0   Convertește hex color la RGB pentru python-docx#c              3   N   K   | ]}t          ||d z            d          V   dS )      N)int).0ir.   s     r   	<genexpr>zhex_to_rgb.<locals>.<genexpr>8   s:      >>qYq1u%r**>>>>>>r   )r   r2      )lstriptuple)r.   s   `r   
hex_to_rgbr;   5   s9      %%I>>>>I>>>>>>r   subiect	timestampc                     |t          j                    }t          j        dd|           }t          j        dd|          }|dd         }|                    d          }| d| S )u+   Generează nume fișier pentru conversațieNz[^\w\s-] z[-\s]+_2   z%Y-%m-%d_%H-%M)r   nowr   r   strftime)r<   r=   subiect_curattimestamp_strs       r   generate_conversation_filenamerF   ;   sq    LNN	 F;G44MF9c=99M!#2#&M&&'788M--m---r   conversation_datafilenamec                 `   |t          | d                   }t          | dz  }t          |dd          5 }|                    d           |                    d           |                    d	           |                    d
| d          d           |                    d| d          d           |                    d| d          d           |                    dt	          | d                    d           |                    d           |                    d           |                    d           t          | d         d          D ]J\  }}|                    | d|d          d|d                                          d|d          d           K|                    d           |                    d           |                    d           |                    d	           d}| d         D ]}|                    d           d!k    rZ|                    d"d          }|                    d#           |                    d$| d           |                    d	           v|                    d           d%k    r|                    d&d'          }|                    d(d'                                          }	|                    d)d'          }
|                    d*d'          }|                    d+d,          }|                    d-d          }|                    d.| d/|	 d0|
 d           |                    d1| d2| d           |                    d           |                    | d           |                    d           |                    d3           |                    d4| d5          d           |                    d6| d7          d           |                    d           ddd           n# 1 swxY w Y   t          |          S )8ua   
    Salvează conversația în format TXT
    Returns: calea completă a fișierului salvat
    Nr<   z.txtwutf-8encodingzQ================================================================================
u#   Page Asist - Conversație Multi-AI
zR================================================================================

	Subiect: 
Data: 
start_time   Număr runde: numar_runde   Număr agenți: agentiz

zQ--------------------------------------------------------------------------------
u   Agenți configurați:
r   z. url - r%    (modelz)
u   CONVERSAȚIE
r   mesajetyperound_startroundzR
================================================================================
zRUNDA messager=   r?   
agent_role	agent_urlcontenttokensN/Aidei_noi[]  @ Tokeni:  | Idei noi: zStatistici finale:
Total mesaje: total_mesajeTotal idei unice: total_idei_unice)	rF   CONVERSATIONS_DIRopenwriter   	enumerateupperr+   str)rG   rH   filepathfr6   agentcurrent_roundmsgr=   r_   r`   ra   rb   rd   s                 r   save_conversation_txtry   I   s   
 12CI2NOO h#4#4#44H	hg	.	.	. -!!	   	7888	!"""	<-i8<<<===	<*<8<<<===	E!2=!AEEEFFF	I3'8'B#C#CIIIJJJ	   	)***	   !"3H"=qAA 	Z 	ZHAuGGqXXE%LXXU5\-?-?-A-AXXU7^XXXYYYY		   	 !!!	!"""$X. 	* 	*Cwwv-// # 3 3.///2222333)****I--GGK44	 WW\266<<>>
GGK44	'')R0051177:q11EIEEEE	EEEFFFD6DDDDDEEE(((7((()))	   	'(((	F!2>!BFFFGGG	N%67I%JNNNOOO	   [-! -! -! -! -! -! -! -! -! -! -! -! -! -! -!^ x==s   OPPPc           	      x
   |t          | d                   }t          | dz  }t                      }|                    dd          }t          j        |_        |                    dd           |                                }d	|                    d
          _	        |                    | d          d           d	|                    d          _	        |                    | d          d           d	|                    d          _	        |                    | d          d           d	|                    d          _	        |                    t          | d                    d           |                    dd           t          | d         d          D ]\  }}|                    d          }d	|                    |d          d          _	        |                    |d                                                    }	d	|	_	        t          t          |d                             }
t          |
 |	j        j        _        |                    d|d          d           |                    dd           d}| d         D ]}|                    d          dk    r1|                    dd          }|                    d | d!           M|                    d          d"k    r|                    d#d$          }|                    d%d$          }|                    d&d$          }|                    d'd$          }|                    d(d)          }|                    d*d          }|                                }|                    d+| d,|                                 d-|           }d	|_	        t          t          |                    }
t          |
 |j        j        _        t)          d.          |j        _        |                                }d	|                    d/| d0|           _        d1|_        |                    |          }d2|_        |                                 |                    d3d           |                                }d	|                    d4          _	        |                    | d5          d           d	|                    d6          _	        |                    | d7          d           |                    |           t3          |          S )8uy   
    Salvează conversația în format DOCX cu formatare colorată
    Returns: calea completă a fișierului salvat
    Nr<   z.docxu"   Page Asist - Conversație Multi-AIr   u   Informații Conversațier   )levelTrN   rO   rP   rQ   rR   rS   rT   rU   u   Agenți ConfigurațizList Number)stylerV   rW   r%   rX   rY   )u   ConversațierZ   r[   r\   r]   zRunda r2   r^   r=   r?   r_   r`   ra   rb   rc   rd   re   rf   rg      rh   ri   zIntense Quotez	Body TextzStatistici Finalerj   rk   rl   rm   )rF   rn   r   add_headingr
   CENTER	alignmentadd_paragraphadd_runboldr   rq   rr   r;   r-   r   fontcolorrgbr+   r	   sizeitalicr|   savers   )rG   rH   rt   doctitleinfor6   rv   prole_runr   rw   rx   r=   r_   r`   ra   rb   rd   header
header_runstatscontent_parastats_finals                           r   save_conversation_docxr      s   
 12CI2NOO h#5#5#55H
**C OO@!DDE,3EO OO.aO888D&*DLL#LL%i0444555#'DLL LL%l3777888+/DLL"##(LL%m4888999-1DLL$%%*LLC)(344888999 OO*!O444/91== 	* 	*5M22/3		U5\&&&'',99e 2 2 4 4677+E%L99::"*C.			(uW~((()))) OON!O,,,M *    776??m++GGGQ//MOO4]44AO>>>>WWV__	))R00Ir22JR00Iggi,,GWWXu--Fwwz1--H &&((F([I([([9I9I9K9K([([PY([([\\J"JO/
;;<<C(0#JO!%#%b66JO  %%''EOSEMMDVDD(DDEEL)EK ,,W55L!,L  OO'qO111##%%K26K)**/,^<@@@AAA6:K-..3,-?@DDDEEEHHXx==r   c                     g } 	 t          j                    }|D ]x}|                     |j        |j        |j        r|j                                        nd|j        r|j                                        nd|j        |j	        |j
        d           ynZ# t          $ rL}t          d|            t                              d          D ]}	 t          |dd          5 }t!          j        |          }|                     |j        |                    d	d          |                    d
d          |                    d          |                    dd          t)          |                    dg                     |                    dd          d           ddd           n# 1 swxY w Y   # t          $ r }t          d| d|            Y d}~d}~ww xY wY d}~nd}~ww xY w| S )uO   
    Încarcă metadatele tuturor conversațiilor salvate din baza de date
    rc   N)idr<   rQ   end_timerS   numar_agentirk   u9   Eroare la încărcarea conversațiilor din baza de date: z*.jsonrrK   rL   r<   rQ   r   rS   r   rU   rk   u   Eroare la încărcarea z: )r   get_all_conversationsr   r   r<   rQ   	isoformatr   rS   r   rk   	Exceptionprintrn   globro   jsonloadstemr+   r   )r   db_conversationsconvefileru   datas          r   load_conversation_metadatar      s    M!)?AA$ 		 		D  g<=A_Wdo77999RW9=PDM33555D#/ $ 1 $ 1" "    		    M!MMNNN &**844 	 	D$g666 
!9Q<<D!(("i#'88Iu#=#=&*hh|U&C&C$(HHZ$8$8'+xxq'A'A(+DHHXr,B,B(C(C(,(C(C* *   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    ;;;;;<<<	 	 	 	 		* sg   BB G+/G&F4!B;F(F4(F,,F4/F,0F43G&4
G>GG&GG&&G+c                     |t          | d                   }t          | dz  }t          |dd          5 }t          j        | |ddt
          	           ddd           n# 1 swxY w Y   t          |          S )
u<   
    Salvează metadatele conversației în format JSON
    Nr<   z.jsonrJ   rK   rL   Fr2   )ensure_asciiindentdefault)rF   rn   ro   r   dumprs   )rG   rH   rt   ru   s       r   save_conversation_jsonr     s     12CI2NOO h#5#5#55H	hg	.	.	. S!	#QU1cRRRRS S S S S S S S S S S S S S S x==s   A""A&)A&)N)#__doc__r   osr   typingr   r   r   pathlibr   docxr   docx.sharedr   r	   docx.enum.textr
   databaser   __file__parentrn   mkdirrs   r   r$   r-   r:   r;   rF   dictry   r   r   r    r   r   <module>r      sa    
			 				                            $ $ $ $ $ $ $ $ 1 1 1 1 1 1 $ $ $ $ $ $ DNN)0?B      & & &     S T#Y    .C .C . . . .?# ?% ? ? ? ?. .C .H .PS . . . .9 9T 9S 9C 9 9 9 9xW Wd Wc WS W W W Wt)DJ ) ) ) )X d c S      r   