"""Pacman: pending updates via `checkupdates` (aus pacman-contrib).

`checkupdates` synct in ein temporäres DB ohne sudo zu brauchen und
listet was bei `pacman -Syu` aktualisiert würde."""
from __future__ import annotations

import subprocess

from taninux.update.types import UpdateItem


def fetch() -> list[UpdateItem]:
    try:
        r = subprocess.run(
            ["checkupdates"],
            capture_output=True, text=True, check=False, timeout=60,
        )
    except (FileNotFoundError, subprocess.TimeoutExpired):
        return []
    # checkupdates exitet 2 wenn keine Updates pending — kein Fehler
    if r.returncode not in (0, 2):
        return []
    items: list[UpdateItem] = []
    for line in r.stdout.splitlines():
        parts = line.split()
        if len(parts) >= 4 and parts[2] == "->":
            items.append(UpdateItem(
                source="pacman",
                name=parts[0],
                current_version=parts[1],
                new_version=parts[3],
                size_bytes=0,
            ))
    return items
