"""
Centralized platform configuration.
All environment variables are loaded once here and shared across the app.
"""
import os
from dotenv import load_dotenv

load_dotenv()

# ── Application ────────────────────────────────────────────────────────────────
APP_NAME: str = os.getenv("APP_NAME", "Chatbot Platform")
ENV: str = os.getenv("ENV", "development")

# ── Google / Firebase ──────────────────────────────────────────────────────────
GOOGLE_CLOUD_PROJECT: str = os.getenv("GOOGLE_CLOUD_PROJECT", "")
FIRESTORE_DATABASE: str = os.getenv("FIRESTORE_DATABASE", "(default)")
GOOGLE_APPLICATION_CREDENTIALS: str = os.getenv("GOOGLE_APPLICATION_CREDENTIALS", "firebase-key.json")

# Firebase Web SDK (client-side — needed by Jinja2 templates)
FIREBASE_WEB_API_KEY: str = os.getenv("FIREBASE_WEB_API_KEY", "")
FIREBASE_AUTH_DOMAIN: str = os.getenv(
    "FIREBASE_AUTH_DOMAIN",
    f"{GOOGLE_CLOUD_PROJECT}.firebaseapp.com" if GOOGLE_CLOUD_PROJECT else ""
)

# ── AI — Gemini ────────────────────────────────────────────────────────────────
GEMINI_API_KEY: str = os.getenv("GEMINI_API_KEY", "")
GEMINI_CHAT_MODEL: str = os.getenv("GEMINI_CHAT_MODEL", "gemini-2.0-flash")
GEMINI_EMBEDDING_MODEL: str = os.getenv("GEMINI_EMBEDDING_MODEL", "text-embedding-004")

# ── AI — OpenAI (optional fallback) ───────────────────────────────────────────
OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")
OPENAI_MODEL: str = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

# ── ChromaDB ───────────────────────────────────────────────────────────────────
CHROMA_PERSIST_DIRECTORY: str = os.getenv("CHROMA_PERSIST_DIRECTORY", "./chroma_data")
VECTOR_SEARCH_LIMIT: int = int(os.getenv("VECTOR_SEARCH_LIMIT", "5"))
FAQ_CONFIDENCE_THRESHOLD: float = float(os.getenv("FAQ_CONFIDENCE_THRESHOLD", "0.65"))

# ── Payment Gateways ───────────────────────────────────────────────────────────
# Stripe
STRIPE_SECRET_KEY: str = os.getenv("STRIPE_SECRET_KEY", "")
STRIPE_PUBLISHABLE_KEY: str = os.getenv("STRIPE_PUBLISHABLE_KEY", "")

# PayPal
PAYPAL_CLIENT_ID: str = os.getenv("PAYPAL_CLIENT_ID", "")
PAYPAL_CLIENT_SECRET: str = os.getenv("PAYPAL_CLIENT_SECRET", "")
PAYPAL_MODE: str = os.getenv("PAYPAL_MODE", "sandbox")  # "sandbox" | "live"

# PayU
PAYU_MERCHANT_KEY: str = os.getenv("PAYU_MERCHANT_KEY", "")
PAYU_MERCHANT_SALT: str = os.getenv("PAYU_MERCHANT_SALT", "")
PAYU_BASE_URL: str = os.getenv("PAYU_BASE_URL", "https://test.payu.in/_payment")

# Gateways listed here AND with keys configured will appear on payment page
ACTIVE_GATEWAYS: list[str] = [
    g.strip() for g in os.getenv("ACTIVE_GATEWAYS", "stripe,paypal,payu").split(",")
]

# ── CORS ───────────────────────────────────────────────────────────────────────
ALLOWED_ORIGINS: list[str] = [
    o.strip() for o in os.getenv("ALLOWED_ORIGINS", "*").split(",")
]

# ── Session Cookie ─────────────────────────────────────────────────────────────
SESSION_COOKIE_NAME: str = "__session"
SESSION_EXPIRY_DAYS: int = int(os.getenv("SESSION_EXPIRY_DAYS", "14"))


def get_available_gateways() -> list[str]:
    """Returns gateways that are both in ACTIVE_GATEWAYS and have keys configured."""
    available = []
    key_map = {
        "stripe": bool(STRIPE_SECRET_KEY),
        "paypal": bool(PAYPAL_CLIENT_ID and PAYPAL_CLIENT_SECRET),
        "payu": bool(PAYU_MERCHANT_KEY and PAYU_MERCHANT_SALT),
    }
    for gw in ACTIVE_GATEWAYS:
        if key_map.get(gw.lower(), False):
            available.append(gw.lower())
    return available


def get_firebase_web_config() -> dict:
    """Returns the Firebase web config dict to inject into Jinja2 templates."""
    return {
        "apiKey": FIREBASE_WEB_API_KEY,
        "authDomain": FIREBASE_AUTH_DOMAIN,
        "projectId": GOOGLE_CLOUD_PROJECT,
    }


# Configuration end

