"""
L2 Server Configuration.

Environment-based settings for the ActivityPub server.
"""

import os
from dataclasses import dataclass
from pathlib import Path


@dataclass
class Settings:
    """L2 Server configuration."""

    # Domain and URLs
    domain: str = os.environ.get("ARTDAG_DOMAIN", "artdag.rose-ash.com")
    l1_public_url: str = os.environ.get("L1_PUBLIC_URL", "https://celery-artdag.rose-ash.com")
    effects_repo_url: str = os.environ.get("EFFECTS_REPO_URL", "https://git.rose-ash.com/art-dag/effects")
    ipfs_gateway_url: str = os.environ.get("IPFS_GATEWAY_URL", "")

    # L1 servers
    l1_servers: list = None

    # Cookie domain for cross-subdomain auth
    cookie_domain: str = None

    # Data directory
    data_dir: Path = None

    # JWT settings
    jwt_secret: str = os.environ.get("JWT_SECRET", "")
    jwt_algorithm: str = "HS256"
    access_token_expire_minutes: int = 60 * 24 * 30  # 30 days

    # OAuth SSO (via account.rose-ash.com)
    oauth_authorize_url: str = os.environ.get("OAUTH_AUTHORIZE_URL", "https://account.rose-ash.com/auth/oauth/authorize")
    oauth_token_url: str = os.environ.get("OAUTH_TOKEN_URL", "https://account.rose-ash.com/auth/oauth/token")
    oauth_client_id: str = os.environ.get("OAUTH_CLIENT_ID", "artdag_l2")
    oauth_redirect_uri: str = os.environ.get("OAUTH_REDIRECT_URI", "https://artdag.rose-ash.com/auth/callback")
    oauth_logout_url: str = os.environ.get("OAUTH_LOGOUT_URL", "https://account.rose-ash.com/auth/sso-logout/")
    secret_key: str = os.environ.get("SECRET_KEY", "change-me-in-production")

    # Internal account URL for server-to-server token exchange (avoids external DNS/TLS)
    internal_account_url: str = os.environ.get("INTERNAL_URL_ACCOUNT", "")

    def __post_init__(self):
        # Parse L1 servers
        l1_str = os.environ.get("L1_SERVERS", "https://celery-artdag.rose-ash.com")
        self.l1_servers = [s.strip() for s in l1_str.split(",") if s.strip()]

        # Cookie domain
        env_cookie = os.environ.get("COOKIE_DOMAIN")
        if env_cookie:
            self.cookie_domain = env_cookie
        else:
            parts = self.domain.split(".")
            if len(parts) >= 2:
                self.cookie_domain = "." + ".".join(parts[-2:])

        # Data directory
        self.data_dir = Path(os.environ.get("ARTDAG_DATA", str(Path.home() / ".artdag" / "l2")))
        self.data_dir.mkdir(parents=True, exist_ok=True)
        (self.data_dir / "assets").mkdir(exist_ok=True)


settings = Settings()
