#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
variables.py – definizione centralizzata di costanti e alias di Kodi.
"""

# ----------------------------------------------------------------------
# 1️⃣  Import standard / Kodi
# ----------------------------------------------------------------------
import sys
import os
import xbmc
import xbmcaddon
import xbmcplugin
import xbmcgui
import xbmcvfs

# ----------------------------------------------------------------------
# 2️⃣  Tor manager (istanza globale)
# ----------------------------------------------------------------------
from tor_manager import TorManager   # wrapper su requests.Session

def _safe_get_bool(setting_id: str, default: bool = False) -> bool:
    """
    Legge in maniera sicura un setting boolean da Kodi.
    Se l'impostazione non esiste oppure il tipo è errato restituisce *default*.

    NOTA: getSettingBool() restituisce un bool Python, non una stringa.
    Il confronto originale `== "true"` era sempre False → Tor risultava
    sempre abilitato indipendentemente dall'impostazione dell'utente.
    """
    try:
        return bool(xbmcaddon.Addon().getSettingBool(setting_id))
    except Exception:          # pragma: no cover
        return default

# Se l'utente non ha definito l'opzione, il valore di default è True
# (Tor abilitato, con fallback diretto se non disponibile).
TOR_ENABLED = _safe_get_bool('disable_tor') is False

# Istanza globale usata da tutto il codice.
tor = TorManager(use_tor=TOR_ENABLED, fallback=True)

# ----------------------------------------------------------------------
# 3️⃣  Identità dell'add‑on (alias sia MAIUSCOLO che minuscolo)
# ----------------------------------------------------------------------
ADDON           = xbmcaddon.Addon()
ADDON_ID        = ADDON.getAddonInfo('id')
ADDON_NAME      = ADDON.getAddonInfo('name')
ADDON_PATH      = xbmcvfs.translatePath(ADDON.getAddonInfo('path'))
ADDON_PROFILE   = xbmcvfs.translatePath(ADDON.getAddonInfo('profile'))
ADDON_ICON      = ADDON.getAddonInfo('icon')
ADDON_FANART    = ADDON.getAddonInfo('fanart')

# Alias minuscoli (usati in models.py, main.py, …)
addon_id        = ADDON_ID
addon_name      = ADDON_NAME
addon_path      = ADDON_PATH
addon_profile   = ADDON_PROFILE
addon_icon      = ADDON_ICON
addon_fanart    = ADDON_FANART

# ----------------------------------------------------------------------
# 4️⃣  Parametri di esecuzione (handle, plugin URL, …)
# ----------------------------------------------------------------------
try:
    HANDLE = int(sys.argv[1])          # handle di Kodi (indice della lista)
except (IndexError, ValueError):
    HANDLE = 0

PLUGIN_URL = sys.argv[0]
# Alias minuscolo per compatibilità
handle      = HANDLE
plugin_url  = PLUGIN_URL

# ----------------------------------------------------------------------
# 5️⃣  Funzioni/alias Kodi usati dal resto del codice
# ----------------------------------------------------------------------
get_setting       = ADDON.getSetting
get_setting_bool  = ADDON.getSettingBool

set_content        = xbmcplugin.setContent
set_category       = xbmcplugin.setPluginCategory
set_resolved_url   = xbmcplugin.setResolvedUrl
end_directory      = xbmcplugin.endOfDirectory
list_item          = xbmcgui.ListItem
execute_builtin    = xbmc.executebuiltin

notify_dialog      = xbmcgui.Dialog().notification
progress_dialog    = xbmcgui.DialogProgress()
sleep              = xbmc.sleep
system_exit        = sys.exit
play               = xbmc.Player().play

# ----------------------------------------------------------------------
# 6️⃣  Percorsi di file/cache (profile, temp, …)
# ----------------------------------------------------------------------
TEMP_PATH           = xbmcvfs.translatePath('special://temp')
SCHEDULE_PATH       = os.path.join(ADDON_PROFILE, 'schedule.json')
CAT_SCHEDULE_PATH   = os.path.join(ADDON_PROFILE, 'cat_schedule.json')
FAVOURITES_PATH    = os.path.join(TEMP_PATH, 'favourites.json')
FAVOURITES_OLD_PATH = os.path.join(ADDON_PROFILE, 'favourites.json')
CHANNELS_PATH       = os.path.join(ADDON_PROFILE, 'channels.json')
CHANNELS_BAK_PATH   = os.path.join(ADDON_PATH, 'resources', 'channels.json')

# ----------------------------------------------------------------------
# 7️⃣  URL base e endpoint
# ----------------------------------------------------------------------
BASE_URL = 'https://dlstreams.top'          # **senza slash finale**
USER_AGENT = (
    'Mozilla/5.0 (Linux; Android 10; K) '
    'AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/114.0.0.0 Mobile Safari/537.36'
)

# Alias genealogici usati da `functions.py`
base_url   = BASE_URL
user_agent = USER_AGENT

HEADERS = {
    'User-Agent': USER_AGENT,
    'Referer'   : f'{BASE_URL}/',
    'Origin'    : f'{BASE_URL}/',
}

# ----------------------------------------------------------------------
# ✅ FIX ENDPOINT: /api/v1/channels e /api/v1/schedule restituivano 404.
# Usiamo direttamente gli endpoint legacy che il sito serve correttamente.
# CHANNELS_ENDPOINT  → pagina HTML con i canali 24/7
# SCHEDULE_ENDPOINT  → JSON generato con lo schedule partite
#
# Se il sito in futuro ripristina le API JSON, basta rimettere:
#   CHANNELS_ENDPOINT = f'{BASE_URL}/api/v1/channels'
#   SCHEDULE_ENDPOINT  = f'{BASE_URL}/api/v1/schedule'
# ----------------------------------------------------------------------
CHANNELS_ENDPOINT = f'{BASE_URL}/24-7-channels.php'
SCHEDULE_ENDPOINT  = f'{BASE_URL}/schedule/schedule-generated.json'

# Endpoint "legacy" – mantenuti per compatibilità con codice esistente
CHANNELS_OLD   = f'{BASE_URL}/24-7-channels.php'
SCHEDULE_OLD   = f'{BASE_URL}/schedule/schedule-generated.json'
SCHEDULE_OLD2  = f'{BASE_URL}/schedule/schedule-generated.php'

# ----------------------------------------------------------------------
# 8️⃣  Alias (minuscolo) per compatibilità con il codice legacy
# ----------------------------------------------------------------------
headers          = HEADERS
channels_url     = CHANNELS_ENDPOINT
channels_url_old = CHANNELS_OLD
schedule_url      = SCHEDULE_ENDPOINT

profile_path     = ADDON_PROFILE
schedule_path    = SCHEDULE_PATH
cat_schedule_path = CAT_SCHEDULE_PATH
fav_path         = FAVOURITES_PATH
fav_old_path     = FAVOURITES_OLD_PATH
ch_path          = CHANNELS_PATH
ch_bak_path      = CHANNELS_BAK_PATH

# ----------------------------------------------------------------------
# 9️⃣  Helper opzionale per cookie anti‑bot (usato solo da TorManager)
# ----------------------------------------------------------------------
def _initialise_cookies(session) -> None:
    """
    Se il sito richiede cookie pre‑autenticazione (Cloudflare,
    Histats, ecc.) questa funzione li prende facendo una
    prima chiamata "normale" e li copia nella sessione di TorManager.
    Se non serve, è un noop.
    """
    import requests
    try:
        r = requests.get(BASE_URL, timeout=10, headers=HEADERS)
        session.cookies.update(r.cookies)
    except Exception:      # pragma: no cover
        pass

# ----------------------------------------------------------------------
# 🔟  Export pubblico – lista per `import *`
# ----------------------------------------------------------------------
__all__ = [
    # Identità addon
    'ADDON', 'ADDON_ID', 'ADDON_NAME', 'ADDON_PATH', 'ADDON_PROFILE',
    'ADDON_ICON', 'ADDON_FANART',
    # minuscola (compatibilità)
    'addon_id', 'addon_name', 'addon_path', 'addon_profile',
    'addon_icon', 'addon_fanart',
    # handle / url
    'HANDLE', 'PLUGIN_URL', 'handle', 'plugin_url',
    # Alias Kodi
    'get_setting', 'get_setting_bool', 'set_content', 'set_category',
    'set_resolved_url', 'end_directory', 'list_item', 'execute_builtin',
    'notify_dialog', 'progress_dialog', 'sleep', 'system_exit', 'play',
    # Percorsi
    'TEMP_PATH', 'SCHEDULE_PATH', 'CAT_SCHEDULE_PATH',
    'FAVOURITES_PATH', 'FAVOURITES_OLD_PATH',
    'CHANNELS_PATH', 'CHANNELS_BAK_PATH',
    # URL / headers
    'BASE_URL', 'HEADERS', 'base_url', 'user_agent',
    'CHANNELS_ENDPOINT', 'SCHEDULE_ENDPOINT',
    'CHANNELS_OLD', 'SCHEDULE_OLD', 'SCHEDULE_OLD2',
    # Alias minuscoli per compatibilità legacy
    'headers', 'channels_url', 'channels_url_old', 'schedule_url',
    'profile_path', 'schedule_path', 'cat_schedule_path',
    'fav_path', 'fav_old_path', 'ch_path', 'ch_bak_path',
    # Tor
    'tor', 'TOR_ENABLED',
    # Helper cookie
    '_initialise_cookies',
]
