
    sh&                         d dl 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 j                  e      Z G d d	      Zy)
    N)Optional)Session)datetimetimezone)StorePersona)schema)AzureLLMPersonaServicec            	       b   e Zd ZdZdefdZ	 ddedee   dej                  fdZ
	 ddedee   deej                     fd	Zdedee   d
ej                  deej                     fdZ	 ddedee   defdZdedeej                     fdZ	 ddedee   dee   fdZdedej                  fdZy)PersonaControllerz-Controller for persona management operations.dbc                 0    || _         t               | _        y N)r   r	   llm_service)selfr   s     D/var/www/html/hubwallet-dev/src/marketing/apps/persona/controller.py__init__zPersonaController.__init__   s    13    Nstore_id	branch_idreturnc           	      B   	 t         j                  d| d|        | j                  j                  | j                  ||      S # t
        $ rQ}t         j                  d| dt        |              t        j                  ddt        |             cY d}~S d}~ww xY w)	zGenerate persona for a store.zGenerating persona for store z	, branch z#Error generating persona for store : FzError generating persona: )successmessageN)
loggerinfor   generate_persona_for_storer   	Exceptionerrorstrr   PersonaGenerationResponse)r   r   r   es       r   generate_personaz"PersonaController.generate_persona   s    		KK7z9+VW##>>twwR[\\ 	LL>xj3q6(ST334SVH= 	s   AA 	BABBBc           	          	 | j                  ||      }|r| j                  |      S y# t        $ r.}t        j	                  d| dt        |              Y d}~yd}~ww xY w)z!Get existing persona for a store.Nz Error getting persona for store r   )_get_existing_persona_build_persona_responser   r   r   r    r   r   r   personar"   s        r   get_personazPersonaController.get_persona%   sa    	009EG33G<< 	LL;H:RAxPQ	s   $( 	A$AAupdate_datac           	         	 | j                  ||      }|sy|j                  |j                  |_        |j                  |j                  |_        |j                  |j                  |_        |j                  |j                  |_        t        j                  t        j                        |_	        | j                  j                          | j                  j                  |       | j                  |      S # t        $ rH}t        j!                  d| dt#        |              | j                  j%                          Y d}~yd}~ww xY w)zUpdate existing persona.Nz!Error updating persona for store r   )r%   industryaudience_typebrand_voicecontent_styler   nowr   utc
updated_atr   commitrefreshr&   r   r   r   r    rollback)r   r   r   r*   r(   r"   s         r   update_personaz PersonaController.update_persona5   s   	009EG ##/#.#7#7 ((4(3(A(A%&&2&1&=&=#((4(3(A(A%!)hll!;GGGNNGGOOG$//88 	LL<XJbQQRGG	s   C9 C!C9 9	E
>EE
c           	      j   	 | j                  ||      }|rJd|_        t        j                  t        j
                        |_        | j                  j                          yy# t        $ rH}t        j                  d| dt        |              | j                  j                          Y d}~yd}~ww xY w)zSoft delete persona.FTz!Error deleting persona for store r   N)r%   	is_activer   r0   r   r1   r2   r   r3   r   r   r   r    r5   r'   s        r   delete_personaz PersonaController.delete_personaV   s    	009EG$)!%-\\(,,%?"  	LL<XJbQQRGG	s   AA! !	B2*>B--B2c                    	 | j                   j                  t              j                  t        j                  |k(  t        j
                  dk(        j                         }|D cg c]  }| j                  |       c}S c c}w # t        $ r}t        j                  dt        |              	 | j                   j                  t              j                  t        j                  |k(        j                         }|D cg c]  }| j                  |       nc c}w c}cY d}~S # t        $ r2}t        j                  dt        |              g cY d}~cY d}~S d}~ww xY wd}~ww xY w)zList all personas for a store.Tz>Error listing personas with is_active filter (schema issue?): NFallback query also failed: )r   queryr   filterr   r8   allr&   r   r   warningr    r   )r   r   personasr(   r"   e2s         r   list_store_personasz%PersonaController.list_store_personasj   s&   
	ww}}\299%%1&&$. ce 
 JRRgD009RRR 	NN[\_`a\b[cde	77==6== ))X5#%  NVV'44W=VVV ;CG9EF			sm   A#B %B =B  B 	E*!E%0AD'DD'!E*'	E"0"EE"E%E*E""E%%E*c                 V   	 | j                   j                  t              j                  t        j                  |k(        }|r"|j                  t        j
                  |k(        }|j                  t        j                  dk(        j                         S # t        $ r	}t        j                  dt        |              	 | j                   j                  t              j                  t        j                  |k(        }|r#|j                  t        j
                  |k(        }n.|j                  t        j
                  j                  d            }|j                         cY d}~S # t        $ r/}t        j                  dt        |              Y d}~Y d}~yd}~ww xY wd}~ww xY w)z&Get existing persona for store/branch.Tz1Error querying existing persona (schema issue?): Nr;   )r   r<   r   r=   r   r   r8   firstr   r   r?   r    is_r   )r   r   r   r<   r"   rA   s         r   r%   z'PersonaController._get_existing_persona   s9   	GGMM,/66|7L7LPX7XYE\%;%;y%HI<< 6 6$ >?EEGG 	NNNsSTvhWXl3::<;P;PT\;\]!LL)?)?9)LME!LL)?)?)C)CD)IJE{{}$ ;CG9EFt	sC   BB 
F(!F#B!E("F((	F 1!FF#F  F##F(r(   c                 J   t        j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                        S )z#Build response from database model.)idr   r   r,   r-   r.   r/   analysis_summaryconfidence_scorelast_analyzed
created_atr2   r8   )r   StorePersonaResponserG   r   r   r,   r-   r.   r/   rH   rI   rJ   rK   r2   r8   )r   r(   s     r   r&   z)PersonaController._build_persona_response   s    **zz%%''%%!//++!//$55$55!//))))''
 	
r   r   )__name__
__module____qualname____doc__r   r   intr   r   r!   r#   rL   r)   PersonaUpdateRequestr6   boolr9   listrB   r   r%   r&    r   r   r   r      sK   747 4 $( C= 
	)	)	( $( C= 
&--	.	  C= 00	
 
&--	.H $( C= 
	( 
f))	*< $( C= 
,		8
| 
@[@[ 
r   r   )loggingtypingr   sqlalchemy.ormr   r   r    src.marketing.apps.persona.modelr   src.marketing.apps.personar   &src.marketing.apps.persona.llm_servicer	   	getLoggerrM   r   r   rU   r   r   <module>r]      s8      " ' 9 - I			8	$d
 d
r   