o
    "Æi8  ã                
   @   sØ   d Z ddlZddlZddlZddlmZmZ ddlmZ e 	e
¡ZG dd„ dƒZddd	„Zdd
d„Ze
dkrjzeƒ  eƒ  e d¡ e d¡ W dS  eyi Z ze de› ¡ e d¡ W Y dZ[dS dZ[ww dS )z[
Environment validation script to check required environment variables and configurations.
é    N)ÚListÚTuple)Úsettingsc                   @   sh   e Zd ZdZdd„ Zddd„Zddd	„Zdd
d„Zddd„Zddd„Z	de
ee ee f fdd„ZdS )ÚEnvironmentValidatorz$Validates environment configuration.c                 C   s   g | _ g | _d S )N)ÚerrorsÚwarnings©Úself© r
   ú>/lsinfo/ai/hellotax_ai/base_platform/app/core/env_validator.pyÚ__init__   s   
zEnvironmentValidator.__init__ÚreturnNc                 C   sP   t jt jdœ}| ¡ D ]\}}|r|d| ¡ › dkr%| j d|› d¡ qdS )z(Validate required environment variables.)Ú
SECRET_KEYÚDATABASE_URLzyour-z-change-this-in-productionu   âŒ z" is not set or using default valueN)r   r   r   ÚitemsÚlowerr   Úappend)r	   Úrequired_varsÚvar_nameÚ	var_valuer
   r
   r   Úvalidate_required_vars   s   þ€þz+EnvironmentValidator.validate_required_varsc                 C   s\   t jdkr*dt j ¡ v r| j d¡ t jr| j d¡ dt j ¡ v r,| j d¡ dS dS dS )z&Validate production-specific settings.Ú
productionzchange-thisu,   âŒ SECRET_KEY must be changed in productionu1   âš ï¸  DEV_MODE should be disabled in productionÚsqliteu+   âŒ SQLite should not be used in productionN)	r   ÚENVIRONMENTr   r   r   r   ÚDEV_MODEr   r   r   r
   r
   r   Úvalidate_production_settings   s   
õ
z1EnvironmentValidator.validate_production_settingsc                 C   s8   t js| j d¡ dS dt j ¡ vr| j d¡ dS dS )z$Validate database connection string.u"   âŒ DATABASE_URL is not configuredÚ
postgresqlu%   âš ï¸  Using non-PostgreSQL databaseN)r   r   r   r   r   r   r   r
   r
   r   Úvalidate_database_connection.   s
   ÿz1EnvironmentValidator.validate_database_connectionc                 C   s   t js| j d¡ dS dS )z Validate API keys configuration.u!   âš ï¸  OPENAI_API_KEY is not setN)r   ÚOPENAI_API_KEYr   r   r   r
   r
   r   Úvalidate_api_keys5   s   ÿz&EnvironmentValidator.validate_api_keysc                 C   s>   t jrt jdkr| j d¡ t jdkr| j d¡ dS dS dS )z%Validate rate limiting configuration.r   u*   âŒ RATE_LIMIT_PER_MINUTE must be positiveu(   âŒ RATE_LIMIT_PER_HOUR must be positiveN)r   ÚRATE_LIMIT_ENABLEDÚRATE_LIMIT_PER_MINUTEr   r   ÚRATE_LIMIT_PER_HOURr   r
   r
   r   Úvalidate_rate_limiting:   s   

üz+EnvironmentValidator.validate_rate_limitingc                 C   s4   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  | j| jfS )zRun all validation checks.)r   r   r   r   r#   r   r   r   r
   r
   r   Úrun_all_validationsB   s   z(EnvironmentValidator.run_all_validations©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r#   r   r   Ústrr$   r
   r
   r
   r   r      s    




"r   r   c                  C   sJ   t ƒ } |  ¡ \}}|D ]}t |¡ q|r#|D ]}t |¡ qtdƒ‚dS )z¥
    Validate environment configuration and raise exception if critical errors found.

    Raises:
        RuntimeError: If critical validation errors are found
    z:Environment validation failed. Please check configuration.N)r   r$   ÚloggerÚwarningÚerrorÚRuntimeError)Ú	validatorr   r   r,   r-   r
   r
   r   Úvalidate_environmentM   s   ýr0   c                   C   sô   t  d¡ t  d¡ t  d¡ t  dtj› ¡ t  dtj› ¡ t  dtj› ¡ t  ddtjv r:tj d¡d nd	› ¡ t  d
tjrGdnd› ¡ tjrat  dtj	› ¡ t  dtj
› ¡ t  dtj› ¡ t  dtj› ¡ t  d¡ dS )z,Print environment information for debugging.z2==================================================zEnvironment ConfigurationzEnvironment: zProject Name: zAPI Version: z
Database: ú@éÿÿÿÿzNot configuredzRate Limiting: ÚEnabledÚDisabledz  - Per Minute: z  - Per Hour: z
Dev Mode: zFrontend URL: N)r+   Úinfor   r   ÚPROJECT_NAMEÚ
API_V1_STRr   Úsplitr    r!   r"   r   ÚFRONTEND_URLr
   r
   r
   r   Úprint_environment_infob   s   


*r:   Ú__main__u!   âœ… Environment validation passedu#   âŒ Environment validation failed: é   r%   )r)   ÚosÚsysÚloggingÚtypingr   r   Ú
app.configr   Ú	getLoggerr&   r+   r   r0   r:   r5   ÚexitÚ	ExceptionÚer-   r
   r
   r
   r   Ú<module>   s,    

@

€þú