
    h                     L    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      Z	y)    N)DictListAnyOptional)Pathc            	       :   e Zd ZddefdZdefdZd Zdeee	f   dedede
fd	Zdededeeee	f      fd
Zdedeeee	f      fdZdedeee	f   dede
fdZdededeeee	f      fdZdeee	f   dede
fdZdededeeee	f      fdZdedeeee	f      fdZy)JSONHandler	base_pathc                 D    t        |      | _        | j                          y )N)r   r
   _create_directories)selfr
   s     IC:\Users\pusha\Downloads\roleplay_prototype_edurigo\utils\json_handler.py__init__zJSONHandler.__init__   s    i 	  "    is_adminc                 P    |dk(  rdnd}| j                   |z  }|dz  |dz  |dz  dS )z$Get storage paths based on user type   adminlearner	scenariosconversationsassessments)r   r   r   )r
   )r   r   	user_type	user_paths       r   _get_storage_pathszJSONHandler._get_storage_paths   sA    '1}G)	NNY.	 #[0&8$}4
 	
r   c                     dD ];  }| j                  |      }|j                         D ]  }|j                  dd        = y)z5Create storage directories for both admin and learner)r   r   T)parentsexist_okN)r   valuesmkdir)r   r   pathspaths       r   r   zJSONHandler._create_directories   sF     	8H++H5E 8

4$
78	8r   scenario_data
session_idreturnc                    	 | j                  |      }d| d}|d   |z  }t        |dd      5 }t        j                  ||dd	       d
d
d
       y# 1 sw Y   yxY w# t        $ r}t        d|        Y d
}~yd
}~ww xY w)z+Save scenario to JSON file using session_id	scenario_.jsonr   wutf-8encoding   Findentensure_asciiNTzError saving scenario: r   openjsondump	Exceptionprint)	r   r#   r   r$   r!   filenamefilepathfes	            r   save_scenariozJSONHandler.save_scenario   s    
	++H5E":,e4H[)H4Hhg6 J!		-15IJJ 	+A3/0	4   -A A	A AA A 	A?'A::A?c                    	 | j                  |      }d| d}|d   |z  }|j                         syt        |dd      5 }t        j                  |      cddd       S # 1 sw Y   yxY w# t
        $ r}t        d|        Y d}~yd}~ww xY w)	z-Load scenario from JSON file using session_idr'   r(   r   Nrr*   r+   zError loading scenario: r   existsr2   r3   loadr5   r6   r   r$   r   r!   r7   r8   r9   r:   s           r   load_scenariozJSONHandler.load_scenario-   s    	++H5E":,e4H[)H4H??$hg6 $!yy|$ $ $ 	,QC01	:   /A+ A+  A	A+ A($A+ (A+ +	B4BBc                    g }	 | j                  |      }|d   j                  d      D ]w  }t        |dd      5 }t        j                  |      }|j                  |j                  d|j                  j                  dd            |d	   |d
   |d   d       ddd       y 	 t        |d d      S # 1 sw Y   xY w# t        $ r}t        d|        Y d}~7d}~ww xY w)z*List all available scenarios for user typer   zscenario_*.jsonr>   r*   r+   r$   r'    category	objective
created_at)r$   rG   rH   rI   NzError listing scenarios: c                     | d   S NrI    xs    r   <lambda>z,JSONHandler.list_scenarios.<locals>.<lambda>N   s
    q r   Tkeyreverse)r   globr2   r3   rA   appendgetstemreplacer5   r6   sorted)r   r   r   r!   r8   r9   scenarior:   s           r   list_scenarioszJSONHandler.list_scenarios=   s    		3++H5E!+.334EF (C': a#yy|H$$&.ll<AVAVWbdfAg&h$,Z$8%-k%:&.|&<	&   i%>MM   	3-aS122	3s/   6B? AB3
B? 3B<	8B? ?	C CC conversation_datac                    	 | j                  |      }d| d}|d   |z  }t        |dd      5 }t        j                  ||dd	       d
d
d
       y# 1 sw Y   yxY w# t        $ r}t        d|        Y d
}~yd
}~ww xY w)zSave conversation to JSON fileconversation_r(   r   r)   r*   r+   r-   Fr.   NTzError saving conversation: r1   )	r   r$   r[   r   r!   r7   r8   r9   r:   s	            r   save_conversationzJSONHandler.save_conversationP   s    
	++H5E&zl%8H_-8Hhg6 N!		+QquMNN 	/s34	r<   c                    	 | j                  |      }d| d}|d   |z  }|j                         syt        |dd      5 }t        j                  |      cddd       S # 1 sw Y   yxY w# t
        $ r}t        d|        Y d}~yd}~ww xY w)	z Load conversation from JSON filer]   r(   r   Nr>   r*   r+   zError loading conversation: r?   rB   s           r   load_conversationzJSONHandler.load_conversation^   s    	++H5E&zl%8H_-8H??$hg6 $!yy|$ $ $ 	045	rD   assessment_datac                 
   	 | j                  |      }d|d    d}|d   |z  }t        |dd      5 }t        j                  ||dd	
       ddd       y# 1 sw Y   yxY w# t        $ r}t        d|        Y d}~y	d}~ww xY w)zSave assessment to JSON fileassessment_r$   r(   r   r)   r*   r+   r-   Fr.   NTzError saving assessment: r1   )r   ra   r   r!   r7   r8   r9   r:   s           r   save_assessmentzJSONHandler.save_assessmentn   s    
	++H5E$_\%B$C5IH]+h6Hhg6 L!		/1QUKLL 	-aS12	s4   0A! AA! AA! A! !	B*A==Bc                    	 | j                  |      }d| d}|d   |z  }|j                         syt        |dd      5 }t        j                  |      cddd       S # 1 sw Y   yxY w# t
        $ r}t        d|        Y d}~yd}~ww xY w)	zLoad assessment from JSON filerc   r(   r   Nr>   r*   r+   zError loading assessment: r?   rB   s           r   load_assessmentzJSONHandler.load_assessment|   s    	++H5E$ZL6H]+h6H??$hg6 $!yy|$ $ $ 	.qc23	rD   c           
         g }	 | j                  |      }|d   j                  d      D ]d  }t        |dd      5 }t        j                  |      }|j                  |d   |j                  d|d         |d   |d	   |d
   d       ddd       f 	 t        |d d      S # 1 sw Y   xY w# t        $ r}t        d|        Y d}~7d}~ww xY w)z4List all assessments with summary info for user typer   zassessment_*.jsonr>   r*   r+   r$   scenario_idoverall_scoreperformance_levelrI   )r$   rh   ri   rj   rI   NzError listing assessments: c                     | d   S rK   rL   rM   s    r   rO   z.JSONHandler.list_assessments.<locals>.<lambda>   s
    < r   TrP   )
r   rS   r2   r3   rA   rT   rU   r5   r6   rX   )r   r   r   r!   r8   r9   
assessmentr:   s           r   list_assessmentszJSONHandler.list_assessments   s    	5++H5E!-0556IJ 	(C': a!%1J&&&0&>'1~~mZP\E]'^)3O)D-78K-L&0&>(  	 k'@$OO   	5/s344	5s/   6B, AB 
B,  B)	%B, ,	C5CCN)storage)__name__
__module____qualname__strr   intr   r   r   r   boolr;   r   rC   r   rZ   r^   r`   rd   rf   rm   rL   r   r   r	   r	      sX   ## #	
3 	
84S> S VY ^b  s xSRUX?W  Ns NtDcN/C N&C DcN ^a fj C 3 8DQTVYQYNC[  tCH~  QU #  $sTWx.AY  P Pd38n1E Pr   r	   )
r3   ostypingr   r   r   r   pathlibr   r	   rL   r   r   <module>rx      s"     	 , , XP XPr   