"""
Public Bomabest Soko mobile app configuration endpoint.

The endpoint is intentionally unauthenticated and defensive: missing
SystemSetting rows, missing migrations, or unexpected lookup errors all return
HTTP 200 with safe defaults.
"""
from __future__ import annotations

import logging

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response

from contract.utils.sys_settings import get_marketplace_public_base_url, get_system_setting

logger = logging.getLogger(__name__)

DEFAULT_PLAY_STORE_URL = "https://play.google.com/store/apps/details?id=com.bomabest.sokoapp"
DEFAULT_UPDATE_TITLE = "New Update Available!"
DEFAULT_UPDATE_MESSAGE = "A new version of Bomabest Soko is available. Update now for the best experience."
DEFAULT_UPDATE_BUTTON_TEXT = "UPDATE"
DEFAULT_UPDATE_LATER_TEXT = "Later"
DEFAULT_APP_SCHEME = "bomabestsoko"


def _setting(key: str, default: str = "") -> str:
    try:
        return get_system_setting(key, default=default)
    except Exception:
        logger.debug("App config setting lookup failed for %s.", key, exc_info=True)
        return str(default or "").strip()


def _safe_bool(value, default=False) -> bool:
    if value is None:
        return bool(default)
    normalized = str(value).strip().lower()
    if normalized in {"1", "true", "yes", "y", "on"}:
        return True
    if normalized in {"0", "false", "no", "n", "off"}:
        return False
    return bool(default)


def _safe_int(value, default=None, *, minimum=0):
    try:
        parsed = int(str(value).strip())
    except (TypeError, ValueError):
        return default
    return parsed if parsed >= minimum else default


def _safe_text(value, default="") -> str:
    text = str(value or "").strip()
    return text or str(default or "").strip()


def _build_update_config() -> dict:
    enabled = _safe_bool(
        _setting("ANDROID_UPDATE_ENABLED", _setting("ANDROID_IN_APP_UPDATES_ENABLED", "false")),
        default=False,
    )
    force_update = _safe_bool(_setting("ANDROID_FORCE_UPDATE", "false"), default=False)
    latest_version_code = _safe_int(_setting("ANDROID_LATEST_VERSION_CODE", ""), None, minimum=1)
    min_required_version_code = _safe_int(_setting("ANDROID_MIN_REQUIRED_VERSION_CODE", ""), None, minimum=1)
    latest_version_name = _safe_text(_setting("ANDROID_LATEST_VERSION_NAME", ""), "")
    play_store_url = _safe_text(_setting("ANDROID_PLAY_STORE_URL", ""), DEFAULT_PLAY_STORE_URL)
    title = _safe_text(_setting("ANDROID_UPDATE_TITLE", ""), DEFAULT_UPDATE_TITLE)
    message = _safe_text(_setting("ANDROID_UPDATE_MESSAGE", ""), DEFAULT_UPDATE_MESSAGE)
    button_text = _safe_text(_setting("ANDROID_UPDATE_BUTTON_TEXT", ""), DEFAULT_UPDATE_BUTTON_TEXT)
    later_text = _safe_text(_setting("ANDROID_UPDATE_LATER_TEXT", ""), DEFAULT_UPDATE_LATER_TEXT)

    mode = "immediate" if force_update else "flexible"

    return {
        "android_update_enabled": enabled,
        "android_latest_version_name": latest_version_name,
        "android_latest_version_code": latest_version_code,
        "android_min_required_version_code": min_required_version_code,
        "android_force_update": force_update,
        "android_play_store_url": play_store_url,
        "android_update_title": title,
        "android_update_message": message,
        "android_update_button_text": button_text,
        "android_update_later_text": later_text,
        # Legacy keys retained for older builds.
        "android_in_app_updates_enabled": enabled,
        "android_update_mode": mode,
    }


def _build_refresh_config() -> dict:
    return {
        "marketplace_feed_refresh_seconds": _safe_int(
            _setting("MARKETPLACE_FEED_REFRESH_SECONDS", "180"), 180, minimum=15
        ),
        "product_detail_refresh_seconds": _safe_int(
            _setting("PRODUCT_DETAIL_REFRESH_SECONDS", "300"), 300, minimum=15
        ),
        "notifications_refresh_seconds": _safe_int(
            _setting("NOTIFICATIONS_REFRESH_SECONDS", "60"), 60, minimum=10
        ),
        "dashboard_refresh_seconds": _safe_int(
            _setting("DASHBOARD_REFRESH_SECONDS", "180"), 180, minimum=15
        ),
        "app_resume_stale_seconds": _safe_int(
            _setting("APP_RESUME_STALE_SECONDS", "60"), 60, minimum=5
        ),
    }


def _build_app_links_config(update_config: dict) -> dict:
    return {
        "android_play_store_url": update_config.get("android_play_store_url") or DEFAULT_PLAY_STORE_URL,
        "public_market_base_url": get_marketplace_public_base_url() or "https://market.bomabest.co.ke",
        "app_scheme": _safe_text(_setting("APP_SCHEME", ""), DEFAULT_APP_SCHEME),
    }


def _safe_payload() -> dict:
    update_config = _build_update_config()
    refresh_config = _build_refresh_config()
    app_links = _build_app_links_config(update_config)

    return {
        "status": "ok",
        "updates": update_config,
        "android_update": update_config,
        "refresh": {
            **refresh_config,
            # Legacy aliases retained for currently released app builds.
            "marketplace_feed_interval_seconds": refresh_config["marketplace_feed_refresh_seconds"],
            "product_detail_interval_seconds": refresh_config["product_detail_refresh_seconds"],
            "notifications_interval_seconds": refresh_config["notifications_refresh_seconds"],
        },
        "app_links": {
            **app_links,
            # Legacy aliases retained for currently released app builds.
            "enabled": True,
            "scheme": app_links["app_scheme"],
            "fallback_path": "market",
        },
    }


@api_view(["GET"])
@permission_classes([AllowAny])
def app_config_view(request):
    try:
        return Response(_safe_payload())
    except Exception:
        logger.exception("Unhandled error in app_config_view; returning safe defaults.")
        return Response(
            {
                "status": "ok",
                "updates": {
                    "android_update_enabled": False,
                    "android_latest_version_name": "",
                    "android_latest_version_code": None,
                    "android_min_required_version_code": None,
                    "android_force_update": False,
                    "android_play_store_url": DEFAULT_PLAY_STORE_URL,
                    "android_update_title": DEFAULT_UPDATE_TITLE,
                    "android_update_message": DEFAULT_UPDATE_MESSAGE,
                    "android_update_button_text": DEFAULT_UPDATE_BUTTON_TEXT,
                    "android_update_later_text": DEFAULT_UPDATE_LATER_TEXT,
                    "android_in_app_updates_enabled": False,
                    "android_update_mode": "flexible",
                },
                "android_update": {
                    "android_update_enabled": False,
                    "android_latest_version_name": "",
                    "android_latest_version_code": None,
                    "android_min_required_version_code": None,
                    "android_force_update": False,
                    "android_play_store_url": DEFAULT_PLAY_STORE_URL,
                    "android_update_title": DEFAULT_UPDATE_TITLE,
                    "android_update_message": DEFAULT_UPDATE_MESSAGE,
                    "android_update_button_text": DEFAULT_UPDATE_BUTTON_TEXT,
                    "android_update_later_text": DEFAULT_UPDATE_LATER_TEXT,
                    "android_in_app_updates_enabled": False,
                    "android_update_mode": "flexible",
                },
                "refresh": {
                    "marketplace_feed_refresh_seconds": 180,
                    "product_detail_refresh_seconds": 300,
                    "notifications_refresh_seconds": 60,
                    "dashboard_refresh_seconds": 180,
                    "app_resume_stale_seconds": 60,
                    "marketplace_feed_interval_seconds": 180,
                    "product_detail_interval_seconds": 300,
                    "notifications_interval_seconds": 60,
                },
                "app_links": {
                    "android_play_store_url": DEFAULT_PLAY_STORE_URL,
                    "public_market_base_url": "https://market.bomabest.co.ke",
                    "app_scheme": DEFAULT_APP_SCHEME,
                    "enabled": True,
                    "scheme": DEFAULT_APP_SCHEME,
                    "fallback_path": "market",
                },
            }
        )
