
    pi
                     j    S r SSKJr  S\S\4S jrS\S\4S jrS\\\\4      S\\\\4      4S	 jr	g
)zParse hihaho interaction JSON to extract branch decision schedules.

Each branch group is a pair of hotspots sharing the same (start_time, end_time)
plus a jump_to that fires at end_time as the default fallback.
    )Anysecondsreturnc                 d    [        U S-  5      n[        U S-  S-  5      nU S-  nUS SUS SUS 3$ )Ni  <   02d:z05.2f)int)r   hmss       WC:\Users\jasmi\Projects\line-hihaho-voting\backend\app\services\interaction_schedule.pyseconds_to_positionr   
   sI    GtOAWt^"#A"AWAaWAaY''    hotspotc                     U R                  S0 5      R                  SS5      R                  SS5      n [        U5      $ ! [        [        4 a     gf = f)Nstyleleftz0%% g        )getreplacefloat
ValueError	TypeError)r   left_strs     r   _hotspot_leftr      sR    {{7B'++FD9AA#rJHX	" s   
? AAinteractionsc                    0 n0 nU  H  nUR                  SS5      nUR                  S5      =(       d    0 nUR                  S5      S:w  a  MF  US:X  ae  UR                  S5      nUR                  S5      nUb>  Ub9  [        U5      [        U5      4nUR                  U/ 5      R                  U5        M  M  M  US	:X  d  M  UR                  S5      nUc  M  X2[        U5      '   M     / n	[	        UR                  5       5       H  u  u  pn[        U5      S
:  a  M  UR                  U5      nU(       a  [        US   S   5      OSn[	        U[        S9n/ n[        U5       HZ  u  nn[        US   S   5      nUR                  UU[        U5      UR                  S0 5      R                  SS5      UU:H  S.5        M\     U	R                  [        U	5      U
UX-
  UUS.5        M     U	$ )zReturn a list of branch decision points, each with timing and hotspot options.

Only groups with 2+ hotspots are considered real branch choices
(single-hotspot groups are typically "go back" buttons).
typer   actionjumpr   
start_timeend_timeNjump_to   time)keyr   r   )index	jump_timepositionr   
is_default)branch_indexr#   r$   duration_secondsdefault_jump_timeoptions)
r   r   
setdefaultappendsorteditemslenr   	enumerater   )r   hotspot_groupsjump_tositemityper!   stetr(   branchesr#   r$   hotspots
default_jtr/   sorted_hotspotsr0   ir   jts                       r   parse_branchesrC      s    =?N"$H$(#)r::f'I,'B*%B~".Ry%),))#r299$? #1~ i,'B~&*r#! $ &(H,2>3G3G3I,J(x=1\\(+
3=E*X&v./4 	 !}=o.DAqq{6*+BNN/3gr*..vr: $55  / 	M$  ( 5!2
 	- -K> Or   N)
__doc__typingr   r   strr   dictr   listrC    r   r   <module>rJ      sb    ( (3 (4 E ;d38n!5 ;$tCH~:N ;r   