
    soj#                     v   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZmZmZmZmZmZmZmZmZmZ d dl m!Z!m"Z" d dl#m$Z$m%Z% 	 	 	 	 d de
dedede&de&de'de'fdZ(	 	 	 	 d!dej)        de
dede&de&de*de&ddfdZ+dedej)        de
deddf
dZ,de
dede&fdZ-dS )"    N)DoesNotExist)Update)ContextTypes)Game)User)Emoji)GameOutcome)PunkRecordsRevealedDetail)set_user_private_screen	save_gameget_playersend_gameend_text_based_gameget_player_board'get_guess_game_users_to_send_message_toshould_proceed_after_hint_sleepget_global_time_based_textget_winner_loser_text"guess_game_should_end_after_answer)full_message_sendescape_valid_markdown_chars)get_current_languageset_current_languageFgameuserlast_detailall_details_are_newadd_instructions	hint_textreturnc           	         dt           dt           dt          fd}t          | |          }g }|j        D ]}	|                    |	          }
t          |
t                     rJt          j                             ||	|
|          s|rt          j
        nd|	t          |
                    }n|g }|
D ]7} ||	||          s|rt          j
        nd|z   }|                    |           8t          j                            |	t          d                    |                              }|                    |           
d                    |          }|||z  }|                                 rA|                     |          r|                                 s|dz  }|t%          | |          z  }|r|dt          j        z   z  }|S )	aY  
    Get the specific text
    :param game: The game object
    :param user: The user to get the recap text for
    :param last_detail: The last detail revealed
    :param all_details_are_new: If all details are new
    :param add_instructions: If instructions should be added
    :param hint_text: The hint text
    :return: The recap text
    _name_valuer!   c                 6    |dS |j         | k    o
|j        |k    S )NF)namevalue)r#   r$   _last_details      ./app/src/chat/common/screens/screen_game_pr.pydetail_is_last_detailz0get_recap_details.<locals>.detail_is_last_detail1   s(    5 E)Jl.@F.JJ     
Nz

)strboolr   revealed_detailsget_revealed_detail
isinstancephrasesPUNK_RECORDS_GAME_RECAP_DETAILformatr   NEWr   append#PUNK_RECORDS_GAME_RECAP_DETAIL_LISTjoin	is_globalis_challengerchallenger_has_finishedr   "GUESS_CHARACTER_GAME_INPUT_CAPTION)r   r   r   r   r   r    r*   boardot_text_listr&   valuesot_text_detaillist_detailsr'   item_detailot_texts                   r)   get_recap_detailsrE      s   &KS K# K K K K K *$55EL& , ,**400fc"" 	$CJJ -,T6;GGK^EII+F33 NN L 1 1 -,T5+FFJ]EII	
 ##K0000$HOO1$))L2I2IJJ N 	N++++ii%%G9~~ :!3!3D!9!9 :d>Z>Z>\>\ :4-dD999 G6GFFFNr+   Tcontextshould_send_to_all_playersschedule_next_sendhint_wait_secondsis_first_runc                   K   ||n|                                 }||                                 k    rd}t          |||o|                                 |           d{V }t          ||          }d}	d}
d}d}|s t	          ||           t          ||          }|j        dk    r8|j        j        d|j                 }t          j	        
                    |          }|                                r#|	t          j        
                    |          z  }	n6|                                s"|	t          j        
                    |          z  }	|
t          j        
                    t!          ||||d|          |	          z   }|D ]Y}| j                            t'          | ||j                             | j                            t+          ||                     Z|sdS t-          j        |           d{V  	 t1          j        |j                  }n# t6          $ r Y dS w xY wt9          | ||           d{V sdS |                                r|                                sdS t;          | ||d           d{V  dS )	a  
    Send the details box
    :param context: The context object
    :param game: The game object
    :param user: The user to send the image to
    :param should_send_to_all_players: If the image should be sent to all players
    :param schedule_next_send: If the next send should be scheduled
    :param hint_wait_seconds: How many seconds to wait before issuing next hint. If none, the game default is used
    :param is_first_run: If it's the first run
    :return: None
    NFr,   r   T)r   r   r    )chat_id)rJ   )get_seconds_for_every_hintr   r:   r   issue_hint_if_possiblerevealed_letters_count	characterr&   r3   GUESS_GAME_INPUT_CAPTION_HINTr5   can_reveal_detail/GUESS_GAME_INPUT_CAPTION_SECONDS_TO_NEXT_DETAILhave_revealed_all_letters-GUESS_GAME_INPUT_CAPTION_SECONDS_TO_NEXT_HINTPUNK_RECORDS_GAME_RECAPrE   applicationcreate_taskr   
tg_user_idr   asynciosleepr   	get_by_ididr   r   run_game)rF   r   r   rG   rH   rI   rJ   usersr>   
recap_textnew_detail_textr    
new_detailhintrD   us                   r)   r^   r^   e   s/     , /:@_@_@a@a 
 D;;====9	#	<DNN,<,<(<	       E *$55E JOIJ :tT***-dD99#a''#$Be&B$BC9@@FF	    
gMTT
 
 	


 ,,.. 
gKRR
 
 	

  ? F F ,!	
 	
 	
 	
! 
! 
G  J J''(9'7TUT`(a(a(abbb 	''(?4(H(HIIII 
-)
*
********^DG,,    1$EEEEEEEE  &&(( 1H1H1J1J 
7D$U
;
;
;;;;;;;;;;s   =H 
H%$H%updatec           	      J  K   t           j                            t          ||          d          }t	          | ||||           d{V sdS t          |          \  }}||k    rt          j        nt          j        }t          ||||            d{V  d|_
        ||k    r|n|}t                      }	t          |                                           t           j                            t          ||          d          }
t          ||
          \  }}t          |                                           t           j                            t          ||          d          }t          ||          \  }}t          |	           t          |||||||           d{V  dS )z
    Validate the answer
    :param update: The update object
    :param context: The context object
    :param game: The game object
    :param user: The user object
    :return: None
    r,   )detail_textN)re   F)r3   rV   r5   rE   r   r   r	   CHALLENGER_WONOPPONENT_WONr   should_update_modelr   r   get_languager   r   )re   rF   r   r   details_text
challengeropponentoutcomeloserplayer_languagewinner_details_textwinner_text_loser_details_text
loser_texts                  r)   validate_answerrw      s      299:KDRV:W:WY[\\L3t          	 't,,J&*j&8&8""k>V  4'&
9
9
99999999$D(**JJE
 +,,O**,,---!9@@ARSWY]A^A^`bcc*41DEENK++--... 8??@QRVX\@]@]_abb)$0BCCMAz)))
gtWdKPZ
[
[[[[[[[[[[r+   c                    t          | |          }|                                s|                                rdS |                                r*|                                }|                    |           n|xj        dz  c_        t          | |                                |                     |          d           dS )z
    Issue a hint if possible, saving the game
    :param game: The game
    :param user: The user
    :return: If a life was issued
    F   T)is_opponent_boardhint_was_issued)	r   rR   rT   get_random_detail_to_revealset_revealed_detailrO   r   get_as_json_stringis_opponent)r   r   r>   rb   s       r)   rN   rN      s     *$55E""$$ )H)H)J)J u   *6688
!!*----$$)$$  ""**400	    4r+   )NFFN)TTNT).rZ   peeweer   src.tg_compatr   src.tg_compat.extr   resources.phrasesr3   src.model.Gamer   src.model.Userr   src.model.enums.Emojir   src.model.game.GameOutcomer	   &src.model.game.punkrecords.PunkRecordsr
   r   src.service.game_servicer   r   r   r   r   r   r   r   r   r   r   src.service.message_servicer   r   src.service.language_servicer   r   r/   r.   rE   DEFAULT_TYPEintr^   rw   rN    r+   r)   <module>r      s                      * * * * * * # # # # # #             ' ' ' ' ' ' 2 2 2 2 2 2 N N N N N N N N                          W V V V V V V V S S S S S S S S #' %"D D
D
D  D 	D
 D D 	D D D DV (,#!c< c<&c<
c< c< !%	c<
 c< c< c< 
c< c< c< c<L*\*\)6*\>B*\JN*\	*\ *\ *\ *\Z T d      r+   