# 환경 변수 로드 

import logging
from linebot import LineBotApi, WebhookHandler
import os
from dotenv import load_dotenv
from openai import AsyncOpenAI
from pathlib import Path
from google import genai


# 1. 현재 파일(config.py)의 경로를 기준으로 프로젝트 루트(back 폴더)를 찾습니다.
# .parent를 3번 쓰면: core -> app -> back 순으로 올라갑니다.
BASE_DIR = Path(__file__).resolve().parent.parent.parent

# 2. .env 파일의 절대 경로를 만듭니다.
env_path = os.path.join(BASE_DIR, '.env')

# 3. 명시된 경로의 .env를 로드합니다.
load_dotenv(dotenv_path=env_path)

LINE_CLIENT_ID = os.getenv("LINE_CLIENT_ID")
openai_api_key = os.getenv('OPENAI_API_KEY')

openweathermap_api_key = os.getenv('OpenWeatherMap_API_KEY')

# Google Gemini 설정
google_api_key = os.getenv('GOOGLE_API_KEY')
# google.genai는 클라이언트를 생성하는 방식으로 변경됨
genai_client = genai.Client(api_key=google_api_key) if google_api_key else None

# Vertex AI 설정
VERTEX_PROJECT = os.getenv("GOOGLE_CLOUD_PROJECT", "")
VERTEX_LOCATION = os.getenv("VERTEX_LOCATION", "us-central1")
VERTEX_API_KEY = os.getenv("VERTEX_API_KEY", "")

def get_vertex_client():
    """Vertex AI 백엔드를 사용하는 google.genai Client 생성"""
    if not VERTEX_API_KEY:
        raise ValueError("VERTEX_API_KEY not configured")
    return genai.Client(
        vertexai=True,
        api_key=VERTEX_API_KEY,
    )


# DB 설정 추가
DB_HOST = os.getenv("DB_HOST", "localhost")
DB_USER = os.getenv("DB_USER", "GOALSkill")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_NAME = os.getenv("DB_NAME", "INPUT_DB")
A_DB_NAME = os.getenv("A_DB_NAME", "A_DB")
B_DB_NAME = os.getenv("B_DB_NAME", "B_DB")
C_DB_NAME = os.getenv("C_DB_NAME", "C_DB")
D_DB_NAME = os.getenv("D_DB_NAME", "D_DB")
Q_DB_NAME = os.getenv("Q_DB_NAME", "Q_DB")
THEORY_DB_NAME = os.getenv("THEORY_DB_NAME", "Theory_DB")
CHAT_LOG_DB_NAME = os.getenv("CHAT_LOG_DB_NAME", "chat_log_DB")

# Zoom Config
ZOOM_MEETING_ID = os.getenv("ZOOM_MEETING_ID")
ZOOM_MEETING_PASSWORD = os.getenv("ZOOM_MEETING_PASSWORD")

# 파일 경로 설정 (환경변수로 오버라이드 가능, 기본값은 프로젝트 구조 기준)
FRONT_DIR = os.getenv("FRONT_DIR", str(Path(BASE_DIR).parent / "front"))
BACK_DIR = os.getenv("BACK_DIR", str(BASE_DIR))

IMG_Q_PATH = os.getenv("IMG_Q_PATH", os.path.join(BACK_DIR, "img_q"))
IMG_EXP_PATH = os.getenv("IMG_EXP_PATH", os.path.join(BACK_DIR, "img_explanation"))
IMG_PATH = os.getenv("IMG_PATH", os.path.join(BACK_DIR, "img"))
PPT_PATH = os.getenv("PPT_PATH", os.path.join(FRONT_DIR, "PPT"))
SELFPR_PATH = os.getenv("SELFPR_PATH", os.path.join(FRONT_DIR, "self_pr"))
STUDYPLAN_FILES_PATH = os.getenv("STUDYPLAN_FILES_PATH", os.path.join(BACK_DIR, "studyplan_files"))
CURRICULUM_PDF_PATH = os.getenv("CURRICULUM_PDF_PATH", os.path.join(FRONT_DIR, "curriculum_PDF"))
PROGRESS_PDF_PATH = os.getenv("PROGRESS_PDF_PATH", os.path.join(FRONT_DIR, "progress_PDF"))

# API URL Prefix (환경변수로 오버라이드 가능)
# 개발: goal-skill-t / POC: goalskill / 고객사: customer-name
APP_PREFIX = os.getenv("APP_PREFIX", "SG")

 # Gemini 모델 객체를 쉽게 가져오는 함수 
# google.genai의 새로운 API에서는 클라이언트를 직접 사용
def get_gemini_model(system_instruction=None):
    """
    google.genai의 새로운 API를 사용하는 함수
    반환값: genai.Client 객체 (모델은 클라이언트를 통해 접근)
    """
    if not genai_client:
        raise ValueError("Google API key is not configured")
    # google.genai에서는 클라이언트를 반환하고, 모델은 클라이언트를 통해 접근
    return genai_client


# 클라이언트 생성 코드 추가!
client = AsyncOpenAI(api_key=openai_api_key)

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

client_id = LINE_CLIENT_ID

def get_db_config(db_name):

    return {
        'user': DB_USER,
        'password': DB_PASSWORD,
        'host': DB_HOST,
        'database': db_name
    }

# Goalskill_DB 전용 설정 (goalskill_result_module 등에서 직접 import)
GOALSKILL_DB_CONFIG = get_db_config("Goalskill_DB")

A_DB_CONFIG = get_db_config("A_DB")
B_DB_CONFIG = get_db_config("B_DB")
C_DB_CONFIG = get_db_config("C_DB")
D_DB_CONFIG = get_db_config("D_DB")
CHAT_LOG_DB_CONFIG = get_db_config("chat_log_DB")
THEORY_DB_CONFIG = get_db_config("Theory_DB")
