o
    Ô€Øh®  ã                   @   sH   d dl Z d dlZd dlmZmZ d dlmZ G dd„ dƒZedd�ZdS )é    N)ÚOptionalÚDict)Úload_dotenvc                   @   s´   e Zd ZdZddedee dee fdd„Zdd
d„Zddd„Z	deded	dfdd„Z
d	eeef fdd„Zdeeef d	dfdd„Zd	eeef fdd„Zded	ejfdd„ZdS )ÚConfigz„
    Simple configuration management class for Notion API token and Flask port.
    Can overwrite .env file values when needed.
    ú.envNÚenv_file_pathÚnotion_tokenÚportc                 C   sl   || _ |  ¡  |pt d¡| _|ptt dd¡ƒ| _|r"|  d|¡ |r,|  dt|ƒ¡ t	j
t	jdd� dS )zñ
        Initialize configuration.
        
        Args:
            env_file_path: Path to the .env file
            notion_token: Optional Notion token to override .env value
            port: Optional port to override .env value
        ÚNOTION_TOKENÚPORTiˆ  z)%(asctime)s - %(levelname)s - %(message)s)ÚlevelÚformatN)r   Ú_load_environmentÚosÚgetenvr
   Úintr   Úupdate_env_valueÚstrÚloggingÚbasicConfigÚINFO)Úselfr   r   r	   © r   ú#/var/www/html/notion2html/config.pyÚ__init__   s   	zConfig.__init__Úreturnc                 C   s    t j | j¡rt| jƒ dS dS )z7Load environment variables from .env file if it exists.N)r   ÚpathÚexistsr   r   ©r   r   r   r   r   &   s   ÿzConfig._load_environmentc                 C   s   | j stdƒ‚dS )z–
        Validate that required configuration values are present.
        
        Raises:
            ValueError: If NOTION_TOKEN is missing
        z›NOTION_TOKEN environment variable is not set! Please create a .env file with your Notion integration token: NOTION_TOKEN=your_notion_integration_token_hereN)r
   Ú
ValueErrorr   r   r   r   Úvalidate_required_config+   s
   ÿÿzConfig.validate_required_configÚkeyÚvaluec                 C   sP   |   ¡ }|||< |  |¡ |tj|< |dkr|| _dS |dkr&t|ƒ| _dS dS )zà
        Update a value in the .env file, creating the file if it doesn't exist.
        
        Args:
            key: Environment variable name (NOTION_TOKEN or PORT)
            value: Environment variable value
        r
   r   N)Ú_read_env_fileÚ_write_env_filer   Úenvironr
   r   r   )r   r!   r"   Úenv_varsr   r   r   r   9   s   


ÿzConfig.update_env_valuec                 C   s�   i }t j | j¡rFt| jddd��-}|D ]!}| ¡ }|r5| d¡s5d|v r5| dd¡\}}| ¡ || ¡ < qW d  ƒ |S 1 sAw   Y  |S )z!Read existing .env file contents.Úrúutf-8©Úencodingú#ú=é   N)r   r   r   r   ÚopenÚstripÚ
startswithÚsplit)r   r&   ÚfÚliner!   r"   r   r   r   r#   L   s   €ü
ÿùzConfig._read_env_filer&   c                 C   s^   t | jddd��}| ¡ D ]\}}| |› d|› d�¡ qW d  ƒ dS 1 s(w   Y  dS )z)Write environment variables to .env file.Úwr(   r)   r,   Ú
N)r.   r   ÚitemsÚwrite)r   r&   r2   r!   r"   r   r   r   r$   Z   s
   ÿ"ÿzConfig._write_env_filec                 C   s   d| j ddœS )z$Get Flask application configuration.z0.0.0.0F)Úhostr	   Údebug)r   r   r   r   r   Úget_flask_config`   s   ýzConfig.get_flask_configÚnamec                 C   s
   t  |¡S )z!Get a configured logger instance.)r   Ú	getLogger)r   r;   r   r   r   Ú
get_loggerh   s   
zConfig.get_logger)r   NN)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r    r   r   r#   r$   Úanyr:   r   ÚLoggerr=   r   r   r   r   r      s     

r   iÙi  )r	   )	r   r   Útypingr   r   Údotenvr   r   Úconfigr   r   r   r   Ú<module>   s    g