
    soj                     p    d dl Z d dlmZ d dlmZ d dlmZ g dZ G d d          Z	 G d de          Z
dS )	    N)	GameBoard)	Character)AffiliationsOccupations	ResidenceStatusc                       e Zd ZdedefdZdS )RevealedDetailnamevaluec                 "    || _         || _        d S )N)r   r   )selfr   r   s      ./app/src/model/game/punkrecords/PunkRecords.py__init__zRevealedDetail.__init__   s    	


    N)__name__
__module____qualname__strr    r   r   r
   r
   
   s6        S       r   r
   c                        e Zd Z	 ddededef fdZdedefd	Z	defd
Z
defdZdedefdZdefdZdeez  fdZdeddfdZ xZS )PunkRecordsNr   	characterrevealed_detailsrevealed_letters_countc                    t                                                       || _        |i n|| _        || _        t          | j                  dk    rjt          t          j        	                                          D ]@}	 | 
                                }|                     |           -# t          $ r Y  dS w xY wdS dS )ae  
        Constructor

        :param character: The character
        :param revealed_details: The revealed details, a dictionary with the key being the name of the revealed detail
                                and the value being the indexes of the values that have been revealed
        :param revealed_letters_count: The revealed letters count
        Nr   )superr   r   r   r   lenrangeEnvPUNK_RECORDS_STARTING_DETAILSget_intget_random_detail_to_revealset_revealed_detail
ValueError)r   r   r   r   i
new_detail	__class__s         r   r   zPunkRecords.__init__   s     	"&6&>DT&<# t$%%**3<DDFFGG  !%!A!A!C!CJ,,Z8888!   EEE +* s   )B++
B:9B:answerreturnc                 r    |duo3|                                 | j        j                                         k    S )zh
        Check if the answer is correct
        :param answer: The answer
        :return: bool
        N)lowerr   r   )r   r)   s     r   
is_correctzPunkRecords.is_correct+   s2     T!Sfllnn8K8Q8Q8S8S&SSr   c                 F    | j         t          | j        j                  k    S )zO
        Check if all letters have been revealed
        :return: bool
        )r   r   r   r   )r   s    r   have_revealed_all_lettersz%PunkRecords.have_revealed_all_letters3   s    
 *c$.2E.F.FFFr   c                 r    t           D ].}|| j        j        d         v r|                     |          s dS /dS )zY
        Check if there is any detail that can be revealed
        :return: bool
        
StatisticsTN)REVEALABLE_DETAILSr   info_boxdetail_is_revealedr   r   s     r   can_reveal_detailzPunkRecords.can_reveal_detail:   sN     ' 	 	Dt~.|<<<TE\E\]aEbEb<tt	 	r   r   c                     || j         vrdS t          | j        j        d         |         t                    rdS t          | j         |                   t          | j        j        d         |                   k    S )zs
        Check if the detail is revealed
        :param name: The name of the detail
        :return: bool
        Fr1   T)r   
isinstancer   r3   r   r   r5   s     r   r4   zPunkRecords.detail_is_revealedD   sp     t,,,5dn-l;DA3GG 	44(.//3t~7N|7\]a7b3c3cccr   c           	          dt           f fd}t          D ]K}| j        j        d         v r5                     |          s | j        vrg  j        |<    ||          c S Lg }t          D ]}| j        j        d         v rt           j        j        d         |         t                     r|                    |ddf           Z|                    |t           j        |                   t           j        j        d         |                   f           |	                    d            |D ]\  }}}||k     r ||          c S t          d          )zP
        Get the detail to reveal
        :return: The detail to reveal
        _namec                     t          j        j        d                   t                    r&t	           j        j        d                             S  fdt          t          j        j        d                                       D             }t	           j        j        d                   t          j        |                             S )Nr1   c                 2    g | ]}|j                  v|S r   )r   ).0r&   r:   r   s     r   
<listcomp>zOPunkRecords.get_random_detail_to_reveal.<locals>.get_detail.<locals>.<listcomp>_   s6     $ $ $D1%888 888r   )	r8   r   r3   r   r
   r   r   randomchoice)r:   indexes_to_pick_fromr   s   ` r   
get_detailz;PunkRecords.get_random_detail_to_reveal.<locals>.get_detailY   s    $.1,?FLL [%eT^-D\-RSX-YZZZ$ $ $ $ $s4>#:<#H#OPPQQ$ $ $  "'5e<V]K_=`=`a  r   r1      c                     | d         S )NrC   r   )xs    r   <lambda>z9PunkRecords.get_random_detail_to_reveal.<locals>.<lambda>   s
    qt r   )keyzNo detail to reveal)r   r2   r   r3   r4   r   r8   appendr   sortr%   )r   rB   r   tuples_listrevealed_valuestotal_valuess   `     r   r#   z'PunkRecords.get_random_detail_to_revealS   s   	c 	 	 	 	 	 	$ ' 	, 	,Dt~.|<<<TE\E\]aEbEb<t44424D)$/%:d+++++ 35& 	 	Dt~.|<<<dn5lCDI3OO &&a|4444  &&  5d ;<< 7 Ed KLL   	^^,,, 4? 	( 	(/D/<--!z$''''' . .///r   c                      t           j        j        d                  t                    r j        j        d                  S  fd j                 D             S )zh
        Get the detail
        :param name: The name of the detail
        :return: The detail
        r1   c                 L    g | ] }j         j        d                   |         !S )r1   )r   r3   )r=   r&   r   r   s     r   r>   z3PunkRecords.get_revealed_detail.<locals>.<listcomp>   s:     
 
 
?@DN#L1$7:
 
 
r   )r8   r   r3   r   r   r5   s   ``r   get_revealed_detailzPunkRecords.get_revealed_detail   su     dn-l;DA3GG 	?>*<8>>
 
 
 
 
DHDYZ^D_
 
 
 	
r   detailc                 4   t          |                     |j                  t                    rdg| j        |j        <   dS | j        |j                                     | j        j        d         |j                                     |j	                             dS )za
        Set the revealed detail
        :param detail: The detail
        :return: None
        r   r1   N)
r8   rO   r   r   r   rH   r   r3   indexr   )r   rP   s     r   r$   zPunkRecords.set_revealed_detail   s     d..v{;;SAA 	23D!&+... !&+.55'5fkBHHVV    r   )Nr   )r   r   r   r   dictintr   r   boolr-   r/   r6   r4   r
   r#   listrO   r$   __classcell__)r(   s   @r   r   r      sE       ab "6:[^     4T T T T T TG4 G G G G4    ds dt d d d d90^ 90 90 90 90v
3: 
 
 
 
. T        r   r   )r?   resources.EnvironmentEnvironmentr    src.model.game.GameBoardr   src.model.wiki.Characterr   r2   r
   r   r   r   r   <module>r\      s     # # # # # # . . . . . . . . . . . .KKK        Y Y Y Y Y) Y Y Y Y Yr   