#!/usr/bin/python3
# Simple python script for getting pacman+aur updates.
# Requires pacman-contrib and paru
import subprocess
import json
import sys

# Visually differentiate matching packages
alert_list = [ "linux-lts", "libvirt", "qemu", "discord" ]

# Get updates for pacman and aur
package_managers = {
    "Pacman": subprocess.run(["checkupdates"], check=False, capture_output=True).stdout.decode('utf-8').splitlines(),
    "AUR": subprocess.run(["paru", "-Qum"], check=False, capture_output=True).stdout.decode('utf-8').splitlines(),
    "Flatpak": subprocess.run(["flatpak", "remote-ls", "--updates"], check=False, capture_output=True).stdout.decode('utf-8').splitlines()
}

# Get number of updates
num_updates = len(package_managers["Pacman"]) + len(package_managers["AUR"])

# Create an empty variable for updates tooltip
tooltip = ""

# Iterate through package managers
for manager,packages in package_managers.items():
    # Only display package manager name if there are any new packages
    if len(packages) > 0: 
        tooltip += "<span color='#8fa1be' font_size='16pt'>" + manager + "</span>\n"
    # Iterate through packages
    for package in packages:
        # Break up package info into parts
        parts = package.split()
        # If the package is in the alert list
        if parts[0] in alert_list:
            # Make it red
            parts[0] = "<span color='#bf616a'>" + parts[0] + "</span>"
        # Format the rest to be pretty
        if manager != "Flatpak":
            version = parts[3]
        else:
            version = ""
        tooltip += parts[0] + " <span color='#a3be8c'>" + version + "</span>\n"
    if len(packages) > 0: 
        tooltip += "\n"

if not tooltip:
    tooltip = "<span font_size='16pt'>No updates</span>"

# Print formatted json
print(json.dumps({"text": num_updates, "tooltip": tooltip.rstrip()}))
