
    ti                         d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlmZ dZ	dZ
e G d d             Ze G d	 d
             Z G d d      Zy)    N)	dataclass)datetimetimezone)loggeri  i	  c                   ,    e Zd ZU eed<   eed<   eed<   y)Playersteam32nameadded_atN__name__
__module____qualname__int__annotations__str     /app/bot/services/storage.pyr   r      s    L
IMr   r   c                   2    e Zd ZU eed<   edz  ed<   eed<   y)Memberuser_idNusername
first_namer   r   r   r   r   r      s    LDjOr   r   c            
          e Zd ZdeddfdZddZddZddZded	ed
ede	fdZ
ded	ede	fdZdedee   fdZdee   fdZdedee   ddfdZdedede	fdZdedededz  deddf
dZdededdfdZdedee   fdZy)PlayerStorepathreturnNc                 n    || _         t        j                         | _        i | _        i | _        i | _        y N)_path	threadingLock_lock_players_seen_members)selfr   s     r   __init__zPlayerStore.__init__   s,    
^^%
68*,
68r   c           
      <   t         j                  j                  | j                        s!t	        j
                  d| j                         y 	 t        | j                  d      5 }t        j                  |      }d d d        j                         D ]$  \  }}t        |      }i | j                  |<   |j                  di       j                         D ]7  \  }}t        |      }t        |d   |d   |d         | j                  |   |<   9 t        |j                  dg             | j                  |<   i | j                   |<   |j                  d	i       j                         D ]P  \  }	}
t        |	      }t#        |
d
   |
j                  d      |
j                  dd            | j                   |   |<   R ' t	        j
                  dt%        | j                               y # 1 sw Y   lxY w# t&        $ r# t	        j(                  d| j                         Y y w xY w)Nz(No data file found at %s, starting freshrplayersr	   r
   r   r	   r
   r   seen_match_idsmembersr   r   r    r   r   r   zLoaded data for %d chat(s)zFailed to load data file %s)osr   existsr!   r   infoopenjsonloaditemsr   r%   getr   setr&   r'   r   len	Exception	exception)r(   frawchat_strdatachat_id	steam_strpr	   uid_strmuids               r   r7   zPlayerStore.load&   s   ww~~djj)KKBDJJO	Hdjj#&!iil '"%))+$h-)+g&$(HHY$;$A$A$CLIq!)nG6< !)vY!":7DMM'*73 %D '*$((3CR*H&I

7#)+g&"&((9b"9"?"?"AJGQg,C28 !)!"z!2#$55r#:3DMM'*3/ #B #.& KK4c$--6HI+ '&,  	H:DJJG	Hs+   G/ "G"8E)G/ "G,'G/ /)HHc                 f    | j                   5  | j                          d d d        y # 1 sw Y   y xY wr    )r$   _save_locked)r(   s    r   savezPlayerStore.saveD   s    ZZ ZZs   '0c                    | j                   dz   }i }t        | j                        t        | j                        z  }|D ]  }| j                  j	                  |i       }t        | j                  j	                  |t                           }| j                  j	                  |i       }|j                         D 	ci c]3  \  }}	t        |      |	j                  |	j                  |	j                  d5 c}	}||j                         D 
ci c]3  \  }
}t        |
      |j                  |j                  |j                  d5 c}}
d|t        |      <    	 t        |d      5 }t!        j"                  ||d       d d d        t%        j&                  || j                          y c c}	}w c c}}
w # 1 sw Y   6xY w# t(        $ r# t+        j,                  d| j                          Y y w xY w)	Nz.tmpr-   r1   )r,   r.   r/   w   )indentzFailed to save data file %s)r!   r:   r%   r'   r9   sortedr&   r8   r   r	   r
   r   r   r   r   r5   r6   dumpr2   replacer<   r   r=   )r(   tmprA   	all_chatsrB   r,   	seen_listr/   s32rD   rG   rF   r>   s                r   rI   zPlayerStore._save_lockedH   s   jj6! "&T]]);;	 Gmm''4Gtzz~~gsu=>Imm''4G #*--/"1Q H!))QVVQRQ[Q[\\"1 #, #*--/"1Q H!))[\[g[ghh"1
"DW	 !	Hc31		$!,  JJsDJJ'
    	H:DJJG	Hs6   ;8F&
8F,F> $F2=(F> 2F;7F> >)G*)G*rB   r	   r
   c                    || j                   vri | j                   |<   || j                   |   v ryt        ||t        j                  t        j
                        j                  d            | j                   |   |<   | j                          y)NFz%Y-%m-%dT%H:%M:%Sr-   T)r%   r   r   nowr   utcstrftimerJ   )r(   rB   r	   r
   s       r   
add_playerzPlayerStore.add_playerb   sx    $--'%'DMM'"dmmG,,*0\\(,,/889LM+
gw'
 			r   c                     || j                   vs|| j                   |   vry| j                   |   |= | j                          y)NFT)r%   rJ   )r(   rB   r	   s      r   remove_playerzPlayerStore.remove_playero   s>    $--'7$--:P+PMM'"7+		r   c                 h    t        | j                  j                  |i       j                               S r    )listr%   r9   valuesr(   rB   s     r   list_playerszPlayerStore.list_playersv   '    DMM%%gr299;<<r   c                 l    | j                   j                         D cg c]	  \  }}|r| c}}S c c}}w r    )r%   r8   )r(   rB   r,   s      r   rS   zPlayerStore.all_chatsy   s>     %)MM$7$7$9
$9  $9
 	
 
s   0	match_idsc                 8   || j                   vrt               | j                   |<   | j                   |   j                  |       t        | j                   |         t        kD  r8t        | j                   |         }t        |t        d        | j                   |<   y y r    )r&   r:   updater;   MAX_SEEN_IDSrO   PRUNE_TO)r(   rB   rd   
sorted_idss       r   	mark_seenzPlayerStore.mark_seen   s}    $**$"%%DJJw

7""9-tzz'"#l2

7 34J"%j&;"<DJJw 3r   match_idc                 N    || j                   j                  |t                     v S r    )r&   r9   r:   )r(   rB   rk   s      r   is_seenzPlayerStore.is_seen   s    4::>>'35999r   r   r   r   c                     | j                   5  || j                  vri | j                  |<   t        |||      | j                  |   |<   | j                          d d d        y # 1 sw Y   y xY w)Nr1   )r$   r'   r   rI   )r(   rB   r   r   r   s        r   record_memberzPlayerStore.record_member   s\    ZZdmm+)+g&.4!%/DMM'"7+
  ZZs   AA""A+c                     | j                   5  || j                  v r1|| j                  |   v r | j                  |   |= | j                          d d d        y # 1 sw Y   y xY wr    )r$   r'   rI   )r(   rB   r   s      r   remove_memberzPlayerStore.remove_member   sL    ZZ$--'Gt}}W7M,MMM'*73!!# ZZs   A AAc                 h    t        | j                  j                  |i       j                               S r    )r^   r'   r9   r_   r`   s     r   list_memberszPlayerStore.list_members   rb   r   )r   N)r   r   r   r   r)   r7   rJ   rI   r   boolrZ   r\   r^   r   ra   rS   r:   rj   rm   ro   rq   r   rs   r   r   r   r   r      s   9S 9T 9H< H4#  3 4 S 3 4 =C =DL =
49 
= =S =d =:s :c :d :	 S 	 3 	 #* 	 Z] 	 bf 	 $S $3 $4 $=C =DL =r   r   )r6   r2   r"   dataclassesr   r   r   bot.core.loggerr   rg   rh   r   r   r   r   r   r   <module>rw      s_     	  ! ' "      B= B=r   