o
    e<h                      @   sF   d dl Z d dlZd dlmZmZmZmZ d dlmZ G dd dZ	dS )    N)DictListAnyOptional)Pathc                   @   s  e Zd ZddefddZdd Zdeeef defd	d
Z	dede
eeef  fddZdeeeef  fddZdedeeef defddZdede
eeef  fddZdeeef defddZdede
eeef  fddZdeeeef  fddZdS )JSONHandlerstorage	base_pathc                 C   s:   t || _| jd | _| jd | _| jd | _|   d S )N	scenariosconversationsassessments)r   r	   scenarios_pathconversations_pathassessments_path_create_directories)selfr	    r   S/var/www/eduai.edurigo.com/doc_train/edurigo_ai/roleplay/prod/utils/json_handler.py__init__   s
   
zJSONHandler.__init__c                 C   s4   | j jddd | jjddd | jjddd dS )z.Create storage directories if they don't existT)parentsexist_okN)r   mkdirr   r   )r   r   r   r   r      s   zJSONHandler._create_directoriesscenario_datareturnc              
   C      z2d|d  d}| j | }t|ddd}tj||ddd	 W d
   W dS 1 s+w   Y  W dS  tyL } ztd|  W Y d
}~dS d
}~ww )zSave scenario to JSON file	scenario_id.jsonwutf-8encoding   Findentensure_asciiNTzError saving scenario: )r   openjsondump	Exceptionprint)r   r   filenamefilepathfer   r   r   save_scenario      

zJSONHandler.save_scenarioscenario_idc              
   C      z2d| d}| j | }| sW dS t|ddd}t|W  d   W S 1 s+w   Y  W dS  tyL } ztd|  W Y d}~dS d}~ww )zLoad scenario from JSON filer   r   Nrr   r    zError loading scenario: )r   existsr&   r'   loadr)   r*   )r   r1   r+   r,   r-   r.   r   r   r   load_scenario#      
(zJSONHandler.load_scenarioc              
   C   s   g }z9| j dD ]0}t|ddd}t|}||d |d |d |d d	 W d
   n1 s4w   Y  q	W n tyT } ztd|  W Y d
}~nd
}~ww t|dd ddS )zList all available scenarioszscenario_*.jsonr3   r   r    r   category	objective
created_at)r   r8   r9   r:   NzError listing scenarios: c                 S      | d S Nr:   r   xr   r   r   <lambda>B       z,JSONHandler.list_scenarios.<locals>.<lambda>Tkeyreverse)	r   globr&   r'   r5   appendr)   r*   sorted)r   r
   r,   r-   scenarior.   r   r   r   list_scenarios2   s&   

	zJSONHandler.list_scenarios
session_idconversation_datac              
   C   s   z0d| d}| j | }t|ddd}tj||ddd W d	   W d
S 1 s)w   Y  W d
S  tyJ } ztd|  W Y d	}~dS d	}~ww )zSave conversation to JSON fileconversation_r   r   r   r    r"   Fr#   NTzError saving conversation: )r   r&   r'   r(   r)   r*   )r   rI   rJ   r+   r,   r-   r.   r   r   r   save_conversationD   s   

zJSONHandler.save_conversationc              
   C   r2   )z Load conversation from JSON filerK   r   Nr3   r   r    zError loading conversation: )r   r4   r&   r'   r5   r)   r*   r   rI   r+   r,   r-   r.   r   r   r   load_conversationQ   r7   zJSONHandler.load_conversationassessment_datac              
   C   r   )zSave assessment to JSON fileassessment_rI   r   r   r   r    r"   Fr#   NTzError saving assessment: )r   r&   r'   r(   r)   r*   )r   rO   r+   r,   r-   r.   r   r   r   save_assessment`   r0   zJSONHandler.save_assessmentc              
   C   r2   )zLoad assessment from JSON filerP   r   Nr3   r   r    zError loading assessment: )r   r4   r&   r'   r5   r)   r*   rM   r   r   r   load_assessmentm   r7   zJSONHandler.load_assessmentc              
   C   s   g }z<| j dD ]3}t|ddd"}t|}||d |d |d |d |d	 d
 W d   n1 s7w   Y  q	W n tyW } ztd|  W Y d}~nd}~ww t|dd ddS )z&List all assessments with summary infozassessment_*.jsonr3   r   r    rI   r1   overall_scoreperformance_levelr:   )rI   r1   rS   rT   r:   NzError listing assessments: c                 S   r;   r<   r   r=   r   r   r   r?      r@   z.JSONHandler.list_assessments.<locals>.<lambda>TrA   )	r   rD   r&   r'   r5   rE   r)   r*   rF   )r   r   r,   r-   
assessmentr.   r   r   r   list_assessments|   s(   


zJSONHandler.list_assessmentsN)r   )__name__
__module____qualname__strr   r   r   r   boolr/   r   r6   r   rH   rL   rN   rQ   rR   rV   r   r   r   r   r      s    	r   )
r'   ostypingr   r   r   r   pathlibr   r   r   r   r   r   <module>   s
    