#!/usr/bin/python3
"""Menüdeki "Uygulamalar" (KDE): katalog onay listesi; değişiklik pkexec ile Konsole'da uygulanır."""
import json
import os
import shlex
import subprocess
import sys

sys.path.insert(0, "/usr/lib/mhmt/python")
from mhmt_cli import katalog  # noqa: E402
from mhmt_cli.dil import ortam, t  # noqa: E402


def main():
    # MHMT Merkezi (Plasma 6, Kirigami) varsa o açılır; yoksa (ör. Kubuntu 24.04) bu basit liste.
    if os.path.exists("/usr/bin/mhmt-merkez"):
        os.execv("/usr/bin/mhmt-merkez", ["mhmt-merkez", "--sayfa", "uygulamalar"])
    durum = json.loads(subprocess.run(["mhmt", "uygulama", "liste", "--json"], stdout=subprocess.PIPE,
                                      universal_newlines=True, check=True).stdout)
    var = {i for i, d in durum.items() if d != "kurulu değil"}
    satirlar = []
    for g in katalog.gruplar():
        for o in g["ogeler"]:
            etiket = f"{katalog.ad(g)} › {katalog.ad(o)} [{katalog.kaynak(o)}] — {katalog.aciklama(o)}"
            satirlar += [o["id"], etiket, "on" if o["id"] in var else "off"]
    r = subprocess.run(["kdialog", "--title", t("Uygulamalar", "Applications"), "--geometry", "760x640",
                        "--checklist", t("Kurulu olmasını istediğin uygulamaları işaretle.\n"
                                         "İşareti kaldırılan uygulama kaldırılır. [Flatpak] olanlar internetten iner.",
                                         "Tick the applications you want installed.\n"
                                         "Unticked applications are removed. [Flatpak] ones are downloaded.")]
                       + satirlar, stdout=subprocess.PIPE, universal_newlines=True)
    if r.returncode != 0:
        return 0
    secili = set(shlex.split(r.stdout))
    kur = sorted(secili - var)
    kaldir = sorted(var - secili)
    if not kur and not kaldir:
        return 0
    adimlar = []
    if kur:
        adimlar.append("mhmt uygulama kur -y " + " ".join(kur))
    if kaldir:
        adimlar.append("mhmt uygulama kaldir -y " + " ".join(kaldir))
    bitti = t("Bitti. Pencereyi kapatabilirsin.", "Done. You can close this window.")
    betik = "; ".join(adimlar) + "; echo; echo " + shlex.quote(bitti)
    # pkexec ortamı boşaltır: dil açıkça taşınır.
    subprocess.run(["konsole", "--hold", "-e", "pkexec", "env", "LANG=" + ortam(), "/bin/sh", "-c", betik])
    return 0


if __name__ == "__main__":
    sys.exit(main())
