import os
import secrets
from dotenv import load_dotenv

load_dotenv()


def _generate_secret():
    key = os.getenv("SECRET_KEY", "")
    if not key or key == "dev-secret" or key == "change-me-to-a-random-secret-key":
        return "fallback-dev-secret-key-please-set-SECRET_KEY-in-env"
    return key


class Config:
    SECRET_KEY = _generate_secret()
    SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL", "sqlite:///app.db")
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SESSION_COOKIE_SAMESITE = "Lax"
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_SECURE = False
    SESSION_PERMANENT = True
    PERMANENT_SESSION_LIFETIME = 604800  # 7 days in seconds
    WTF_CSRF_SSL_STRICT = False
    WTF_CSRF_TIME_LIMIT = None

    AI_PROVIDER = os.getenv("AI_PROVIDER", "openai")
    OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")
    ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "")
    FAST_MODEL = os.getenv("FAST_MODEL", "gpt-4o-mini")
    DEEP_MODEL = os.getenv("DEEP_MODEL", "gpt-4o")

    STRIPE_SECRET_KEY = os.getenv("STRIPE_SECRET_KEY", "")
    STRIPE_PUBLISHABLE_KEY = os.getenv("STRIPE_PUBLISHABLE_KEY", "")
    STRIPE_WEBHOOK_SECRET = os.getenv("STRIPE_WEBHOOK_SECRET", "")
    STRIPE_PRICE_PRO = os.getenv("STRIPE_PRICE_PRO", "")
    STRIPE_PRICE_ENTERPRISE = os.getenv("STRIPE_PRICE_ENTERPRISE", "")

    MAIL_SERVER = os.getenv("MAIL_SERVER", "smtp.gmail.com")
    MAIL_PORT = int(os.getenv("MAIL_PORT", "587"))
    MAIL_USE_TLS = os.getenv("MAIL_USE_TLS", "false").lower() == "true"
    MAIL_USE_SSL = os.getenv("MAIL_USE_SSL", "false").lower() == "true"
    MAIL_USERNAME = os.getenv("MAIL_USERNAME", "")
    MAIL_PASSWORD = os.getenv("MAIL_PASSWORD", "")
    MAIL_DEFAULT_SENDER = os.getenv("MAIL_DEFAULT_SENDER", "noreply@jadwaai.com")

    ADMIN_EMAIL = os.getenv("ADMIN_EMAIL", "admin@jadwaai.com")

    GAMMA_API_KEY = os.getenv("GAMMA_API_KEY", "")
    WATHQ_API_KEY = os.getenv("WATHQ_API_KEY", "")
    GOOGLE_VEO_API_KEY = os.getenv("GOOGLE_VEO_API_KEY", "")
    GOOGLE_GEMINI_API_KEY = os.getenv("GOOGLE_GEMINI_API_KEY", "") or os.getenv("GOOGLE_VEO_API_KEY", "")
    SORA_API_KEY = os.getenv("SORA_API_KEY", "")

    # Kling AI (Kuaishou) — https://klingai.com/global/dev/pricing
    KLING_ACCESS_KEY = os.getenv("KLING_ACCESS_KEY", "")
    KLING_SECRET_KEY = os.getenv("KLING_SECRET_KEY", "")

    # Runway ML — https://dev.runwayml.com/
    RUNWAY_API_KEY = os.getenv("RUNWAY_API_KEY", "")

    # Pika Labs — https://pika.art/
    PIKA_API_KEY = os.getenv("PIKA_API_KEY", "")

    # fal.ai — https://fal.ai/dashboard/keys
    FAL_KEY = os.getenv("FAL_KEY", "")
    MULTISAAS_API_URL = os.getenv("MULTISAAS_API_URL", "")
    MULTISAAS_API_KEY = os.getenv("MULTISAAS_API_KEY", "")
    EVOLUTION_API_URL = os.getenv("EVOLUTION_API_URL", "")
    EVOLUTION_API_KEY = os.getenv("EVOLUTION_API_KEY", "")

    # Google NotebookLM integration
    NOTEBOOKLM_ENABLED = os.getenv("NOTEBOOKLM_ENABLED", "false").lower() == "true"
    # Mode: "admin_shared" = single admin account for all users, "per_user" = each user logs in separately
    NOTEBOOKLM_MODE = os.getenv("NOTEBOOKLM_MODE", "admin_shared")

    SENTRY_DSN = os.getenv("SENTRY_DSN", "")
    REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379/0")
    CACHE_TYPE = os.getenv("CACHE_TYPE", "SimpleCache")
    CACHE_DEFAULT_TIMEOUT = int(os.getenv("CACHE_DEFAULT_TIMEOUT", "300"))

    # Google OAuth 2.0
    GOOGLE_CLIENT_ID = os.getenv("GOOGLE_CLIENT_ID", "")
    GOOGLE_CLIENT_SECRET = os.getenv("GOOGLE_CLIENT_SECRET", "")
    GOOGLE_REDIRECT_URI = os.getenv("GOOGLE_REDIRECT_URI", "")
