o
    H8h                     @   sn   d dl mZ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 dlmZ G dd	 d	ZdS )
    )DictListAnyOptional)datetimeN)RoleplayScenario)ConversationTurn)GroqService)JSONHandlerc                	   @   s   e Zd Zdd ZdedefddZdedededee fd	d
Zdede	fddZ
dedeeeeef   fddZdedeee  fddZdede	fddZdedeeeef  fddZdS )RoleplayEnginec                 C   s   t  | _t | _d S )N)r	   groq_servicer
   json_handler)self r   \/var/www/eduai.edurigo.com/doc_train/edurigo_ai/roleplay/testing/services/roleplay_engine.py__init__
   s   zRoleplayEngine.__init__scenarioreturnc              	   C   sN   t t }||jt  ddd|jt  dgd}| j	|| |S )zStart a new roleplay sessionactive   systemturn_numberspeakermessage	timestamp)
session_idscenario_id
started_atstatusturns)
struuiduuid4idr   now	isoformatscenario_intror   save_conversation)r   r   r   conversation_datar   r   r   start_session   s   

zRoleplayEngine.start_sessionr   learner_messagec                 C   s   | j |}|s
dS t|d d }|d|t  d}|d | dd |d D }t|dk}|r9|j}	ndd |d dd	 D }
| j	|
 |
|}	|	sTdS |d d
|	t  d}|d | | j || |	S )z%Add learner response and get AI replyNr    r   learnerr   c                 S   s   g | ]
}|d  dkr|qS )r   r,   r   .0turnr   r   r   
<listcomp>:   s    z7RoleplayEngine.add_learner_response.<locals>.<listcomp>c                 S   s*   g | ]}|d  dkr|d  |d dqS )r   r   r   )r   r   r   r-   r   r   r   r0   B   s    ai)r   load_conversationlenr   r%   r&   appendconversation_starterr   play_characterto_dictr(   )r   r   r   r+   r)   r   learner_turnlearner_turnsis_first_learner_responseai_responseconversation_historyai_turnr   r   r   add_learner_response'   s@   
	
z#RoleplayEngine.add_learner_responsec                 C   s:   | j |}|s
dS d|d< t  |d< | j ||S )zEnd a roleplay sessionF	completedr   ended_at)r   r3   r   r%   r&   r(   r   r   r)   r   r   r   end_sessionb   s   zRoleplayEngine.end_sessionc                 C   s   | j |}|s
dS |d S )zGet full conversation historyNr    )r   r3   rB   r   r   r   get_conversation_historym   s   z'RoleplayEngine.get_conversation_historyc                 C   sT   | j |}|s
dS g }|d D ]}t|d |d |d |d d}|| q|S )z/Get conversation turns formatted for assessmentNr    r   r   r   r   r   )r   r3   r   r5   )r   r   r)   r    	turn_datar/   r   r   r   %get_conversation_turns_for_assessmentu   s   z4RoleplayEngine.get_conversation_turns_for_assessmentc                 C   s$   | j |}|s
dS |dddkS )z"Check if a session is still activeFr   r   )r   r3   getrB   r   r   r   is_session_active   s   z RoleplayEngine.is_session_activec                 C   sH   | j |}|s
dS |d |d |d |ddt|d |dd	S )
zGet basic session informationNr   r   r   r   r   r    rA   )r   r   r   r   
turn_countrA   )r   r3   rG   r4   rB   r   r   r   get_session_info   s   

zRoleplayEngine.get_session_infoN)__name__
__module____qualname__r   r   r!   r*   r   r?   boolrC   r   r   r   rD   r   rF   rH   rJ   r   r   r   r   r   	   s    ;""r   )typingr   r   r   r   r   r"   models.scenarior   models.assessmentr   services.groq_servicer	   utils.json_handlerr
   r   r   r   r   r   <module>   s    