import re
from urllib.parse import urlsplit

import xbmc

_ERROR_PREFIX_RE = re.compile(
    r"^(?:\[[^\]]+\]\s*)?(?:error|failed|traceback|exception|crash)\b",
    re.IGNORECASE,
)


def _resolve_log_level(message, level):
    if level is not None:
        return level
    if isinstance(message, BaseException):
        return xbmc.LOGERROR
    if _ERROR_PREFIX_RE.match(str(message)):
        return xbmc.LOGERROR
    return xbmc.LOGDEBUG


def kodilog(message, level=None):
    xbmc.log("[###JACKTOOKLOG###] " + str(message), _resolve_log_level(message, level))


def summarize_locator_for_log(value):
    text = str(value or "").strip()
    if not text:
        return ""

    magnet_match = re.search(r"btih:([A-Fa-f0-9]{8,40})", text)
    if text.startswith("magnet:?"):
        if magnet_match:
            return f"magnet:{magnet_match.group(1).lower()[:12]}"
        return "magnet"

    if re.fullmatch(r"[A-Fa-f0-9]{40}", text):
        return f"infohash:{text.lower()[:12]}"

    if text.startswith(("http://", "https://")):
        parts = urlsplit(text)
        path = parts.path or "/"
        return f"{parts.scheme}://{parts.netloc}{path}"

    return text[:80]
