import xbmc
import json
import time

# Λίστα με όλα τα απαραίτητα addons (Binary & VFS)
REQUIRED_ADDONS = {
    "inputstream.adaptive": "InputStream Adaptive",
    "inputstream.ffmpegdirect": "InputStream FFmpegDirect",
    "inputstream.rtmp": "InputStream RTMP",
    "vfs.rar": "RAR Archive Support",
    "vfs.libarchive": "Libarchive Support"
}

def log(message):
    xbmc.log(f"[Service.AutoInstall] {message}", xbmc.LOGINFO)

def set_addon_enabled(addon_id):
    """Ενεργοποιεί το addon αν είναι απενεργοποιημένο"""
    payload = {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "Addons.SetAddonEnabled",
        "params": {"addonid": addon_id, "enabled": True}
    }
    response = xbmc.executeJSONRPC(json.dumps(payload))
    return response

def install_logic():
    log("Checking for required Binary and VFS addons...")
    
    for addon_id, name in REQUIRED_ADDONS.items():
        # Έλεγχος αν το addon είναι ήδη εγκατεστημένο
        if xbmc.getCondVisibility(f'System.HasAddon({addon_id})'):
            log(f"Addon {addon_id} exists. Ensuring it's enabled.")
            set_addon_enabled(addon_id)
            continue
        
        # Αν λείπει, ξεκινά η διαδικασία
        log(f"Addon {addon_id} NOT found. Attempting installation.")
        
        # Εμφάνιση ειδοποίησης στην οθόνη
        header = "Αυτόματη Εγκατάσταση"
        message = f"Εγκατάσταση του {name}..."
        xbmc.executebuiltin(f'Notification({header}, {message}, 6000)')
        
        # Εντολή εγκατάστασης από το επίσημο αποθετήριο
        xbmc.executebuiltin(f'InstallAddon({addon_id})')
        
        # Αναμονή 5 δευτερολέπτων πριν το επόμενο για να μην "μπουκώσει" ο installer
        time.sleep(5)
        
        # Ενεργοποίηση (just in case)
        set_addon_enabled(addon_id)

if __name__ == '__main__':
    # Αναμονή 12 δευτερολέπτων για να σιγουρευτούμε ότι το δίκτυο είναι έτοιμο
    log("Service initialized. Waiting for network/startup...")
    time.sleep(12)
    
    try:
        install_logic()
        log("Installation check finished.")
    except Exception as e:
        log(f"Critical Error: {str(e)}")