U
    a›hQ   ã                   @   s    d Z ddlZddlmZ ddlmZ ddlmZ e e	¡Z
eedddd	„ ƒZeeƒd
d„ ƒZeeƒdd„ ƒZeedddd„ ƒZejrœeedddd„ ƒZdS )zµ
Agency Signals

This module contains Django signal handlers for the agencies app,
including post-migration signals to create default data.

Author: Development Team
Version: 1.0.0
é    N)Úpost_migrate)Úreceiver)ÚsettingsÚagencies)Úsenderc              
   K   s  z¤ddl m} |j ¡ }t d|› ¡ |dkrt d¡ | ¡ }|r„t dt|ƒ› d¡ |D ] }t d|j› d|j	› d	¡ q`q¢t d
¡ nt d|› d¡ W nX t
k
rü } z:t dt|ƒ› ¡ tjrìddl}t d| ¡ › ¡ W 5 d}~X Y nX dS )a¶  
    Create default AgencyType instances after migrations are run.
    
    This signal handler is triggered after all migrations for the agencies app
    have been applied. It ensures that the default agency types are available
    in the system for users to select when creating agencies.
    
    The signal will only create agency types if they don't already exist,
    making it safe to run multiple times.
    
    Args:
        sender: The sender of the signal (agencies app)
        **kwargs: Additional signal arguments
        
    Signal Information:
        - Signal: post_migrate
        - Sender: agencies app
        - When: After all migrations are applied for agencies app
    r   ©Ú
AgencyTypezLPost-migration signal triggered for agencies app. Current AgencyType count: zHNo existing AgencyType instances found. Creating default agency types...zSuccessfully created z default agency types:z  - z (Premium: ú)z9No new agency types were created (they may already exist)z$AgencyType instances already exist (z( found). Skipping default type creation.z%Error creating default agency types: NzFull traceback: )Úapps.agencies.modelsr   ÚobjectsÚcountÚloggerÚinfoÚcreate_default_typesÚlenÚnameÚ
is_premiumÚ	ExceptionÚerrorÚstrr   ÚDEBUGÚ	tracebackÚ
format_exc)r   Úkwargsr   Zexisting_countÚcreated_typesÚagency_typeÚer   © r   ú0/var/www/html/Focus/src/apps/agencies/signals.pyÚcreate_default_agency_types   s$    

 r   c                 K   s6   t | dƒr2| jdkr2t| d| jƒ}t d|› ¡ dS )a0  
    Log when migrations are completed for any app.
    
    This is a general signal handler that logs migration completion.
    It's useful for debugging and monitoring migration status.
    
    Args:
        sender: The app that completed migrations
        **kwargs: Additional signal arguments
    r   zapps.agenciesÚlabelzMigrations completed for app: N)Úhasattrr   Úgetattrr   r   )r   r   Ú	app_labelr   r   r   Úlog_migration_completionK   s    r$   c              
   K   s   t | ddƒ}|dkrdS z<ddlm} |j ¡ r6W dS t d¡ | ¡  t d¡ W n6 tk
rŠ } zt 	dt
|ƒ› ¡ W 5 d}~X Y nX dS )	a3  
    Alternative signal handler that checks for specific app.
    
    This is a backup method that ensures default agency types are created
    even if the sender filtering doesn't work as expected.
    
    Args:
        sender: The sender of the signal 
        **kwargs: Additional signal arguments
    r    Nr   r   r   z4Alternative signal: Creating default agency types...z=Alternative signal: Default agency types created successfullyzAlternative signal error: )r"   r
   r   r   Úexistsr   r   r   r   r   r   )r   r   r#   r   r   r   r   r   Ú"create_agency_defaults_alternative^   s    

r&   c              
   K   sö   zºddl m} |j ¡ }| ¡ s&W dS t d| ¡ › d¡ d}|D ]L}d}|jr^|j 	d¡shd|_d	}|j
dkr|d|_
d	}|rD| ¡  |d
7 }qD|dkr®t d|› d¡ n
t d¡ W n6 tk
rð } zt dt|ƒ› ¡ W 5 d}~X Y nX dS )aK  
    Validate and fix any AgencyType data integrity issues.
    
    This signal ensures that:
    1. All agency types have valid color codes
    2. Sort orders are properly set
    3. No duplicate names exist
    
    Args:
        sender: The sender of the signal (agencies app)
        **kwargs: Additional signal arguments
    r   r   NzValidating z AgencyType instances...Fú#z#007BFFTé   zUpdated z( AgencyType instances for data integrityz"All AgencyType instances are validz"Error validating AgencyType data: )r
   r   r   Úallr%   r   r   r   Ú
color_codeÚ
startswithÚ
sort_orderÚsaver   r   r   )r   r   r   Zagency_typesZupdated_countr   Zneeds_updater   r   r   r   Úvalidate_agency_type_data   s.    


r.   c           
      K   sà   z¤ddl m}m} ddlm} |ƒ }|j ¡ r4W dS |j ¡ rH|j ¡ sNW dS t d¡ |j 	¡ }|j 	¡ }|jj
dd||dd	d
dddddd}t d|j› ¡ W n6 tk
rÚ }	 zt dt|	ƒ› ¡ W 5 d}	~	X Y nX dS )aM  
        Create sample agency data for development environments.
        
        This signal only runs in DEBUG mode and creates sample agencies
        for testing and development purposes.
        
        Args:
            sender: The sender of the signal (agencies app)
            **kwargs: Additional signal arguments
        r   )ÚAgencyr   )Úget_user_modelNz*DEBUG MODE: Creating sample agency data...zSample Creative Agencyzcontact@sampleagency.comz>A sample creative agency for testing and development purposes.z+1-555-123-4567zhttps://sampleagency.comiä  Úsmallé   T)r   Úemailr   ÚownerÚdescriptionÚphoneÚwebsiteÚfounded_yearÚagency_sizeÚemployee_countÚ	is_activeÚis_verifiedzCreated sample agency: z#Error creating sample agency data: )r
   r/   r   Údjango.contrib.authr0   r   r%   r   r   ÚfirstÚcreater   r   r   r   )
r   r   r/   r   r0   ÚUserÚuserr   Zsample_agencyr   r   r   r   Úcreate_sample_agency_data¶   s8    



ôrB   )Ú__doc__ÚloggingZdjango.db.models.signalsr   Údjango.dispatchr   Údjango.confr   Ú	getLoggerÚ__name__r   r   r$   r&   r.   r   rB   r   r   r   r   Ú<module>   s    



7

 

5
