
    soj                         d dl m Z  d dlT d dlmZ d dlmZ d dlmZ  G d de          Z	e	
                                 dS )    )datetime)*N)	BaseModel)Userc                      e Zd ZU dZ eeddd          Z edd          Z edd          Z	 e
d	          Z ed
          Z edd          Z edd          Z ed	          Z ed	          Z ed
          Z ed
          Z ed	          Z ed	          Z e
d	          Z eeddd          Zeez  ed<    G d d          Zedefd            ZdefdZdS )ImpelDownLogz
    Impel Down Log class
    impel_down_usersCASCADE)backref	on_delete	on_updatec   T)
max_lengthnull
   )r   F)defaulti  impel_down_bail_payersRESTRICT)r   r   r   
bail_payerc                       e Zd ZdZdS )ImpelDownLog.Metaimpel_down_logN)__name__
__module____qualname__db_table     /app/src/model/ImpelDownLog.pyMetar   #   s        #r   r    userc                    |                                  sdS t                                                              t          j        | k    t          j        dk    z  t          j        dk    t          j        t          j	                    k    z  z  t          j
                                        z                                t          j                                                                                  S )aI  
        Get the current impel down log for the user.

        Always returns the LATEST active record (highest id) so that a new
        dashboard sentence is never shadowed by an older bot-created record
        that hasn't been reversed yet.

        :param user: The user
        :return: The impel down log, or None
        NFT)is_arrestedr   selectwherer!   is_reversedis_permanentrelease_date_timer   now	bail_dateis_nullorder_byiddescfirst)r!   s    r   get_current_for_userz!ImpelDownLog.get_current_for_user&   s     !! 	4 !!U"d*+u46 ".$6#5FH  )11335  Xlo**,,--UWW	
r   returnc                 6   | j         dS | j         j        | j                             d          n| j         }|t          j                    z
                                  }t          |dz            }|dk    rdS |t          j        	                                z  S )a^  
        Calculate the bail cost based on the number of whole minutes remaining.

        release_date_time is stored as a naive datetime by both the bot and the
        dashboard. tzinfo is stripped defensively so a timezone-aware value
        stored by a future migration doesn't cause a TypeError.

        :return: Bail amount in bounty
        Nr   )tzinfo<   )
r(   r3   replacer   r)   total_secondsintEnvIMPEL_DOWN_BAIL_PER_MINUTEget_int)self
release_dtremaining_secondsremaining_minutess       r   get_bailzImpelDownLog.get_bailD   s     !)1
 %,8 "**$*777' 	 ((,..8GGII   1R 788!!1 3#A#I#I#K#KKKr   N) r   r   r   __doc__ForeignKeyFieldr   r!   	CharFieldsentence_typesourceDateTimeFieldr(   BooleanFieldr'   bounty_actionreasonBigIntegerFieldprevious_bounty
new_bountymessage_sentr&   IntegerFieldexternal_idbail_amountr*   r   __annotations__r    staticmethodr0   r7   r?   r   r   r   r   r   
   s          ?(I  D I$777MY"4000F%4000<...LI$777MY#D111F%o4000O d+++J<...L,u---K,D)))K!/t,,,K4(((I)8.TZ* * *J&   $ $ $ $ $ $ $ $ 
4 
 
 
 \
:L# L L L L L Lr   r   )r   peeweeresources.EnvironmentEnvironmentr8   src.model.BaseModelr   src.model.Userr   r   create_tabler   r   r   <module>rX      s              # # # # # # ) ) ) ) ) )      UL UL UL UL UL9 UL UL ULp        r   