"""
Product analytics for QA Copilot (Roadmap 5.3).

Sends events to PostHog via HTTP API. No-op when QA_POSTHOG_API_KEY is not set.
Fire-and-forget (background thread).
"""
from __future__ import annotations

import json
import os
import threading
import urllib.request

_api_key = os.environ.get("QA_POSTHOG_API_KEY", "")
_host = os.environ.get("QA_POSTHOG_HOST", "https://app.posthog.com")


def is_configured() -> bool:
    return bool(_api_key)


def track(event: str, user_id: str = "", properties: dict | None = None) -> None:
    """Send an event to PostHog. No-op if not configured."""
    if not _api_key:
        return
    payload = {
        "api_key": _api_key,
        "event": event,
        "distinct_id": user_id or "anonymous",
        "properties": {**(properties or {}), "$lib": "qa-copilot"},
    }
    def _send():
        try:
            req = urllib.request.Request(
                f"{_host.rstrip('/')}/capture/",
                data=json.dumps(payload).encode(),
                headers={"Content-Type": "application/json"},
                method="POST",
            )
            urllib.request.urlopen(req, timeout=5)
        except Exception:
            pass
    threading.Thread(target=_send, daemon=True).start()


def identify(user_id: str, traits: dict | None = None) -> None:
    """Identify a user with traits. No-op if not configured."""
    if not _api_key:
        return
    payload = {
        "api_key": _api_key,
        "event": "$identify",
        "distinct_id": user_id,
        "properties": {"$set": traits or {}},
    }
    def _send():
        try:
            req = urllib.request.Request(
                f"{_host.rstrip('/')}/capture/",
                data=json.dumps(payload).encode(),
                headers={"Content-Type": "application/json"},
                method="POST",
            )
            urllib.request.urlopen(req, timeout=5)
        except Exception:
            pass
    threading.Thread(target=_send, daemon=True).start()
