o
    	im                     @   sD   d dl Z d dlmZmZ d dlmZ d dlZG dd dZe ZdS )    N)OptionalAny)load_dotenvc                	   @   s   e Zd ZdZddefddZdd Zdd	 Zddedede	defddZ
d dede	de	fddZd!dededefddZd"dedededefddZede	fddZede	fddZdS )#	EnvLoaderu)   환경 변수 로딩 및 검증 클래스Nenv_filec                 C   s   t jt jt jt jt jt| _|r|| _n?t j| jd}t j|r:t	|dd t 
dd }ntd| d d}|dkrSt j| jd	| _n	t j| jd
| _|   |   d S )Nz.envFoverrideENVIRONMENTdevelopmentu2   메인 환경 변수 파일을 찾을 수 없음: u    , 기본값 'development' 사용
productionz.env.productionz.env.development)ospathdirnameabspath__file__project_rootr   joinexistsr   getenvlowerloggingwarning	_load_env_validate_required_vars)selfr   main_env_fileenvironment r   H/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/src/config/env_loader.py__init__
   s   .zEnvLoader.__init__c                 C   sH   t j| jrt| jdd td| j  dS td| j  dS )u   환경 변수 파일 로드Tr   u    환경 변수 파일 로드됨: u+   환경 변수 파일을 찾을 수 없음: N)r   r   r   r   r   r   infor   r   r   r   r   r   &   s   zEnvLoader._load_envc                 C   sF   g d}g }|D ]}t |s|| q|r!tdd| dS )u   필수 환경 변수 검증)OPENAI_API_KEY
SECRET_KEY	FLASK_APPu#   필수 환경 변수가 누락됨: z, N)r   r   append
ValueErrorr   )r   required_varsmissing_varsvarr   r   r   r   .   s   

z!EnvLoader._validate_required_varsFkeydefaultrequiredreturnc                 C   s,   t ||}|r|du rtd| d|S )u   환경 변수 값 가져오기Nu   필수 환경 변수 'u   '가 설정되지 않음)r   r   r&   )r   r*   r+   r,   valuer   r   r   get>   s   zEnvLoader.getc                 C   s   t |t| }|dv S )u%   불린 환경 변수 값 가져오기)true1yeson)r   r   strr   )r   r*   r+   r.   r   r   r   get_boolG   s   zEnvLoader.get_boolr   c                 C   s.   zt t|t|W S  ty   | Y S w )u%   정수 환경 변수 값 가져오기)intr   r   r4   r&   )r   r*   r+   r   r   r   get_intL   s
   zEnvLoader.get_int,	separatorc                 C   s,   t |d}|s|pg S dd ||D S )u(   리스트 환경 변수 값 가져오기 c                 S   s   g | ]}|  qS r   )strip).0itemr   r   r   
<listcomp>X   s    z&EnvLoader.get_list.<locals>.<listcomp>)r   r   split)r   r*   r9   r+   r.   r   r   r   get_listS   s   zEnvLoader.get_listc                 C   s   |  dd dkS )u   개발 환경 여부r	   r
   r/   r   r!   r   r   r   is_developmentZ      zEnvLoader.is_developmentc                 C   s   |  dd dkS )u   프로덕션 환경 여부r	   r
   r   rA   r!   r   r   r   is_production_   rC   zEnvLoader.is_production)N)NF)F)r   )r8   N)__name__
__module____qualname____doc__r4   r   r   r   r   boolr/   r5   r6   r7   listr@   propertyrB   rD   r   r   r   r   r      s    	r   )	r   typingr   r   dotenvr   r   r   envr   r   r   r   <module>   s   
^