import os
import logging
from fastapi_mail import ConnectionConfig

from utils.logging import logger

def get_mail_config():
    required_vars = [
        "MAIL_USERNAME",
        "MAIL_PASSWORD",
        "MAIL_FROM",
        "MAIL_SERVER",
        "MAIL_PORT"
    ]

    missing = [var for var in required_vars if not os.getenv(var)]

    if missing:
        logger.error(f"[ERROR] Missing email config vars: {missing}")
        raise Exception(f"Missing env vars: {missing}")

    try:
        conf = ConnectionConfig(
            MAIL_USERNAME=os.getenv("MAIL_USERNAME"),
            MAIL_PASSWORD=os.getenv("MAIL_PASSWORD"),
            MAIL_FROM=os.getenv("MAIL_FROM"),
            MAIL_SERVER=os.getenv("MAIL_SERVER"),
            MAIL_PORT=int(os.getenv("MAIL_PORT")),
            MAIL_STARTTLS=False,
            MAIL_SSL_TLS=True,
            USE_CREDENTIALS=True,
            VALIDATE_CERTS=False
        )

        logger.info("[SUCCESS] Mail configuration loaded successfully")
        logger.info(f"[INFO] MAIL_FROM = {conf.MAIL_FROM}")
        logger.info(f"[INFO] MAIL_SERVER = {conf.MAIL_SERVER}:{conf.MAIL_PORT}")

        return conf

    except Exception as e:
        logger.exception("[ERROR] Failed to initialize mail config")
        raise e


conf = get_mail_config()

logger.info("[INFO] Email config module imported successfully")

# HARD CHECK (important)
if conf is None:
    logger.error("[ERROR] conf is None — email config failed to load")
    raise Exception("Email config not initialized")

logger.info(f"[SUCCESS] CONF OBJECT TYPE: {type(conf)}")