
    Ii                     Z    S r SSKJrJr  SSKrSSKJr  \(       a  SSKJr   " S S5      r	g)	z-Table manager for tracking all active tables.    )TYPE_CHECKINGAnyN   )Table)Userc                   
   \ rS rSrSrS rS\S\SSS\4S	 jrS
\S\S-  4S jr	S
\SS4S jr
S\\   4S jrS\S\\   4S jrSS\S-  S\\   4S jjrS\S\S-  4S jrSS jrS\SS4S jrS\\   4S jrS\SS4S jrSrg)TableManager   z'Manage all active tables on the server.c                      0 U l         SU l        g)zInitialize the table registry.N)_tables_serverselfs    9c:\Users\dbart\PlayPalace11\server\core\tables\manager.py__init__TableManager.__init__   s    )+     	game_typehost_username	host_userr   returnc                     [        [        R                  " 5       5      SS n[        UUUS9nXl        U R
                  Ul        U R
                  (       a  U R
                  R                  Ul        UR                  X#SS9  XPR                  U'   U$ )zCreate a new table and add the host as a member.

Args:
    game_type: Game type identifier.
    host_username: Username of the host.
    host_user: Host User instance.

Returns:
    Newly created Table instance.
N   )table_idr   hostF)as_spectator)	struuiduuid4r   _managerr   _db
add_memberr   )r   r   r   r   r   tables         r   create_tableTableManager.create_table   s|      tzz|$Ra(

 <<((EIF!&Xr   r   Nc                 8    U R                   R                  U5      $ )zGet a table by ID.)r   getr   r   s     r   	get_tableTableManager.get_table2   s    ||))r   c                 <    U R                   R                  US5        g)zRemove a table by id.N)r   popr(   s     r   remove_tableTableManager.remove_table6   s    4(r   c                 H    [        U R                  R                  5       5      $ )zGet all tables.)listr   valuesr   s    r   get_all_tablesTableManager.get_all_tables:   s    DLL'')**r   c                     U R                   R                  5        Vs/ s H  o"R                  U:X  d  M  UPM     sn$ s  snf )z'Get all tables of a specific game type.)r   r1   r   )r   r   ts      r   get_tables_by_typeTableManager.get_tables_by_type>   s2    <<..0M0aKK94L0MMMs   ==c                     U R                   R                  5       nU(       a#  U Vs/ s H  o3R                  U:X  d  M  UPM     nnU Vs/ s H  o3R                  S:X  d  M  UPM     sn$ s  snf s  snf )z!Get all tables in waiting status.waiting)r   r1   r   status)r   r   tablesr5   s       r   get_waiting_tablesTableManager.get_waiting_tablesB   s[    $$&!'DA;;)+CaFD!;6aXX%:6;; E;s   A)A)	A. A.usernamec                     U R                   R                  5        H,  nUR                   H  nUR                  U:X  d  M  Us  s  $    M.     g)z&Find the table a user is currently in.N)r   r1   membersr>   )r   r>   r#   members       r   find_user_tableTableManager.find_user_tableI   s=    \\((*E--??h. L ( + r   c                     [        U R                  R                  5       5       H6  nUR                  (       d  UR	                  5         M&  UR                  5         M8     g)z.Tick all active tables and destroy empty ones.N)r0   r   r1   r@   destroyon_tickr   r#   s     r   rF   TableManager.on_tickQ   s:    $,,--/0E==MMO	 1r   r#   c                     Xl         U R                  Ul        U R                  (       a  U R                  R                  Ul        XR                  UR                  '   g)z3Add an existing table (e.g., loaded from database).N)r    r   r!   r   r   rG   s     r   	add_tableTableManager.add_tableY   s:    <<((EI',U^^$r   c                     U R                   R                  5        H  nUR                  5         M     [        U R                   R                  5       5      $ )z,Save all tables' game state and return them.)r   r1   save_game_stater0   rG   s     r   save_allTableManager.save_alla   s=    \\((*E!!# +DLL'')**r   c                     U R                  UR                  5        U R                  (       a  U R                  R                  U5        gg)z4Handle table destruction. Called by Table.destroy().N)r-   r   r   on_table_destroyrG   s     r   rQ   TableManager.on_table_destroyg   s2    %..)<<LL))%0 r   )r   r   )N)r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r$   r)   r-   r0   r2   r6   r<   rB   rF   rJ   rN   rQ   __static_attributes__ r   r   r	   r	      s    1!
  	
 
<*# *%$, *)S )T )+U +NC NDK N<C$J <$u+ <  -u - -+$u+ +1e 1 1r   r	   )
rW   typingr   r   r   r#   r   server.core.users.baser   r	   rY   r   r   <module>r\      s#    3 %  +_1 _1r   