"""Fingerprint sinyal birleştirme + cihaz tespiti.

Widget JS hash'i kendisi gönderebilir; ham sinyaller gelirse burada birleştirilir.
"""
import hashlib
import json


def compute_fingerprint(signals: dict | None) -> str | None:
    """Ham sinyalleri (canvas, audio, fonts, screen...) deterministik SHA256'ya çevirir."""
    if not signals:
        return None
    canonical = json.dumps(signals, sort_keys=True, separators=(",", ":"), ensure_ascii=False)
    return hashlib.sha256(canonical.encode("utf-8")).hexdigest()


def detect_device_type(user_agent: str | None) -> str | None:
    if not user_agent:
        return None
    ua = user_agent.lower()
    if any(t in ua for t in ("ipad", "tablet")):
        return "tablet"
    if any(m in ua for m in ("mobi", "android", "iphone", "ipod")):
        return "mobile"
    return "desktop"
