
    soj                     P   d dl Z d dlmZ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 d dlmZ d dlmZ d dlmZ d dlmZ dede	fdZdede	ddfdZde	dededdfdZdej         fdZ!dede	fdZ"d dede#defdZ$dej         fdZ%dede	fdZ&dS )!    N)CallbackContextContextTypes)phrases)Crew)DavyBackFight)DavyBackFightParticipant)User)
GameStatus)DavyBackFightStartNotificationDavyBackFightEndNotification)IncomeTaxEventType)CrewValidationException)GameOutcome)get_datetime_in_future_days)send_notificationuserdavy_back_fightc                    | j         }|                                t          j        urt	          t
          j                  ||j        |j        fvrt	          t
          j	                  | |
                    |          v rt	          t
          j                  t                      }||_        | |_        ||_         |                                 dS )z
    Add a participant to the Davy Back Fight
    :param user: The user object
    :param davy_back_fight: The Davy Back Fight object
    :return: None
    )crewN)r   
get_statusr
   COUNTDOWN_TO_STARTr   r   ITEM_IN_WRONG_STATUSchallenger_crewopponent_crew:CREW_DAVY_BACK_FIGHT_USER_NOT_MEMBER_OF_PARTICIPATING_CREWget_participants-CREW_DAVY_BACK_FIGHT_USER_ALREADY_PARTICIPANTr   r   r   save)r   r   r   participants       +/app/src/service/davy_back_fight_service.pyadd_participantr!      s     D !!##:+HHH%g&BCCC O3_5RSSS%N
 
 	

 //T/::::%g&[\\\ -E,F,FK"1KKK    r   returnc                    |                                  |j        k     rt          t          j                  t          j                                        t
          j        |k    t
          j	        | k    z            
                                 t          |                                           D ]$\  }}||j        k    r dS t          ||           %dS )z
    Set the default participants for a Davy Back Fight
    :param crew: The crew object
    :param davy_back_fight: The Davy Back Fight object
    :return: None
    )r   r   N)get_member_countparticipants_countr   r   'CREW_DAVY_BACK_FIGHT_NOT_ENOUGH_MEMBERSr   deletewherer   r   execute	enumerate-get_members_order_by_davy_back_fight_priorityr!   )r   r   indexr   s       r    set_default_participantsr.   6   s     !CCC%g&UVVV #%%++	!	1_	D#(D0	2  giii !!S!S!U!UVV D DtO666EET?CCCCCD Dr"   old_participantnew_participantc                     t          j                                        t           j        | k    t           j        |k    z                                             t          ||            dS )z
    Swap a participant
    :param davy_back_fight: The Davy Back Fight object
    :param old_participant: The old participant object
    :param new_participant: The new participant object
    :return: None
    N)r   r(   r)   r   r   r*   r!   )r   r/   r0   s      r    swap_participantr2   O   s`     #%%++	!	1_	D#(O;	=  giii O_55555r"   contextc                 6  K   t          j                                        t           j        t          j        k    t           j        t          j                                        k     z            D ]*}| j	        
                    t          | |                     +dS )za
    Start all the Davy Back Fights
    :param context: The context object
    :return: None
    N)r   selectr)   statusr
   r   
start_datedatetimenowapplicationcreate_taskstartr3   r   s     r    	start_allr>   d   s       )/1177		!>	>#h&7&;&;&=&==	?  I I 	''g(G(GHHHH	I Ir"   c           
        K   t           j        |_        |                                 |                                D ]D}t          | |j        t          |                    |j	                  |                     d{V  EdS )z
    Start a Davy Back Fight
    :param context: The context object
    :param davy_back_fight: The Davy Back Fight object
    :return: None
    N)
r
   IN_PROGRESSr6   r   r   r   r   r   get_opponent_crewr   )r3   r   r   s      r    r<   r<   r   s       (3O '7799 
 
*11+2BCC_ 
 
 	
 	
 	
 	
 	
 	
 	
 	

 
r"   amountopponentc                 &  K   | j         }|dS |                                }|dS |                    |           }|dS |dz  }|'|j         |k    rdS |                    |          r|dz  }|xj        |z  c_        |                                 dS )z
    Add contribution to the Davy Back Fight
    :param user: The user object
    :param amount: The amount
    :param opponent: The opponent from which bounty is taken
    :return: None
    N   )r   get_in_progress_davy_back_fightget_participantis_participantcontributionr   )r   rB   rC   r   dbfr   s         r    add_contributionrK      s       D |==??C {,/,?,?,E,EK  qLF=D  F h'' 	aKF&r"   c                 6  K   t          j                                        t           j        t          j        k    t           j        t          j                                        k     z            D ]*}| j	        
                    t          | |                     +dS )z_
    End all the Davy Back Fights
    :param context: The context object
    :return: None
    N)r   r5   r)   r6   r
   r@   end_dater8   r9   r:   r;   endr=   s     r    end_allrO      s       )/1177		!7	7!H$5$9$9$;$;;	=  G G 	''G_(E(EFFFF	G Gr"   c                   K   ddl m} |                                }|t          j        u r|j        }t          j        |_        n|j	        }t          j
        |_        t          |j        |j                  |_        |                                 |                                }|D ]}|j        |k    ro|                                |_        |                                 | j                             ||j        |j        | dt.          j        |j                             t5          | |j        t7          |                    |j                  |                     d{V  dS )z
    End a Davy Back Fight
    :param context: The context object
    :param davy_back_fight: The Davy Back Fight object
    :return: None
    r   )add_or_remove_bounty)
start_timeT)rB   r3   should_savetax_event_typeevent_idN)src.service.bounty_servicerQ   get_outcomer   CHALLENGER_WONr   r
   WONr6   r   LOSTr   penalty_daysrM   penalty_end_dater   r   r   get_win_amount
win_amountr:   r;   r   r   DAVY_BACK_FIGHTidr   r   rA   )r3   r   rQ   outcomewinner_crewparticipantsr   s          r    rN   rN      s      @?????*6688G+,,,%5!+%3!+'B$1I( ( (O$  4C3S3S3U3UL# 
 
{**%0%?%?%A%AK"
 ++$$$&1# $#5#E,/  	 	 	  (11+2BCC[ 
 
 	
 	
 	
 	
 	
 	
 	
 	
'
 
r"   )N)'r8   src.tg_compat.extr   r   	resourcesr   src.model.Crewr   src.model.DavyBackFightr   "src.model.DavyBackFightParticipantr   src.model.Userr	   src.model.enums.GameStatusr
   src.model.enums.Notificationr   r   -src.model.enums.income_tax.IncomeTaxEventTyper   src.model.error.CustomExceptionr   src.model.game.GameOutcomer   src.service.date_servicer    src.service.notification_servicer   r!   r.   r2   DEFAULT_TYPEr>   r<   intrK   rO   rN    r"   r    <module>rt      sa    ; ; ; ; ; ; ; ;             1 1 1 1 1 1 G G G G G G       1 1 1 1 1 1        M L L L L L C C C C C C 2 2 2 2 2 2 @ @ @ @ @ @ > > > > > >$     @D4 D- DD D D D D26"6596LP6	6 6 6 6*I\6 I I I I
 
= 
 
 
 
,) ) )s )d ) ) ) )XG<4 G G G G1
 1
 1
 1
 1
 1
 1
 1
r"   