# TODO when a new kf6 ver drops update also the single kapidox recipe (and breeze-icons and extra-cmake-modules and k3b kirigami addons and plasma
pkgname =  "kf6" # libkccdb, pulseaudio-qt kde-connect
pkgver  = "6.20.0" 
Pkgver = pkgver[:4]
source  = f"https://rocketleaguechatp.duckdns.org/pappalaugh.jpg"
bbuilddir = f"/tmp/fempkg/build/{pkgname}/attica-{pkgver}"
builddir = f"{bbuilddir}/kf6"
fembuilddir = f"/tmp/fempkg/build/{pkgname}"
outputdir = "/home/gabry/lfs-repo/binpkg"
manifestdir = "/home/gabry/lfs-repo/manifests"
destdir = f"{fembuilddir}/DESTDIR"
deps = ["gpgmepp", "aspell","extra-cmake-modules", "breeze-icons", "libcanberra", "libgcrypt", 
        "libical", "lmdb", "qca", "libqrencode", "plasma-wayland-protocols", 
        "shared-mime-info", "URI", "wget", "zxing-cpp"]

build = [
    # Extract
    f"mkdir -p {builddir}",

    # kf6 prefix + versioned symlink
    f"mkdir -p {destdir}/opt/kf6-{pkgver} && ln -sfn kf6-{pkgver} {destdir}/opt/kf6",
    f"mkdir -p {destdir}/opt/kf6/{{etc,share}}",

    f"""mkdir -p {destdir}$KF6_PREFIX/etc/dbus-1 &&
        mkdir -p {destdir}$KF6_PREFIX/share/dbus-1 &&
        mkdir -p {destdir}$KF6_PREFIX/share/polkit-1""",

    f"mkdir -p {destdir}/etc/dbus-1 {destdir}/usr/share/dbus-1 {destdir}/usr/share/polkit-1",

    f"cd {builddir} && export url=https://rocketleaguechatp.duckdns.org/kf6/ && wget -r -nH -nd -A '*.xz' -np $url || true",
    f"cd {builddir} && wget https://rocketleaguechatp.duckdns.org/frameworks-{pkgver}.md5",

    f"""cd {builddir} && bash -e <<'EOF'
mkdir -p {destdir}$KF6_PREFIX

while read -r line; do

    if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
    file=$(echo $line | cut -d" " -f2)

    pkg=$(echo $file|sed 's|^.*/||')
    packagedir=$(echo $pkg|sed 's|\\.tar.*||')
    name=$(echo $pkg|sed 's|-6.*$||')

    tar -xf $file
    pushd $packagedir

      case $name in
        kapidox)
          pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
          pip3 install --root={destdir} --no-index --find-links dist --no-user --force-reinstall --no-deps kapidox
          install -v -d -m755 {destdir}/usr/share/licenses/kapidox/
          install -v -m644 ./LICENSES/BSD-2-Clause.txt {destdir}/usr/share/licenses/kapidox/BSD-2-Clause.txt
          install -v -m644 ./LICENSES/CC0-1.0.txt {destdir}/usr/share/licenses/kapidox/CC0-1.0.txt
          install -v -m644 ./LICENSES/LGPL-3.0-or-later.txt {destdir}/usr/share/licenses/kapidox/LGPL-3.0-or-later.txt
          popd
          rm -rf $packagedir
          continue
          ;;
      esac

      mkdir build
      cd build

      cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \\
            -D CMAKE_INSTALL_LIBEXECDIR=libexec \\
            -D CMAKE_PREFIX_PATH=$QT6DIR        \\
            -D CMAKE_SKIP_INSTALL_RPATH=ON      \\
            -D CMAKE_BUILD_TYPE=Release         \\
            -D BUILD_TESTING=OFF                \\
            -D BUILD_PYTHON_BINDINGS=OFF        \\
            -D ENABLE_DOCS=OFF                  \\
            -W no-dev ..

      make -j$(nproc)
      make DESTDIR={destdir} install

      mkdir -p "{destdir}/usr/share/licenses/$name"

      LICENSE_FILES=$(find . \\
        -regextype posix-extended \\
        -iregex '.*(LICEN[SC]E(|S)|COPYING|COPYRIGHT|LEGAL|NOTICE)(|\\.txt|\\.md)' \\
        -type f)

      while read -r lf; do
          [ -z "$lf" ] && continue
          relpath=$(echo "$lf" | sed 's|^\\./||')
          install -Dm644 "$lf" \\
              "{destdir}/usr/share/licenses/$name/$relpath"
      done <<< "$LICENSE_FILES"

    popd
    rm -rf $packagedir
    /sbin/ldconfig

done < frameworks-{pkgver}.md5
EOF
""",

    # Move payloads safely (no globbing, no dotfile loss)
    f"""if [ -d {destdir}/opt/kf6/etc/dbus-1 ]; then
            cp -aT {destdir}/opt/kf6/etc/dbus-1 {destdir}/etc/dbus-1 &&
            rm -rf {destdir}/opt/kf6/etc/dbus-1
        fi""",

    f"""if [ -d {destdir}/opt/kf6/share/dbus-1 ]; then
            cp -aT {destdir}/opt/kf6/share/dbus-1 {destdir}/usr/share/dbus-1 &&
            rm -rf {destdir}/opt/kf6/share/dbus-1
        fi""",

    f"""if [ -d {destdir}/opt/kf6/share/polkit-1 ]; then
            cp -aT {destdir}/opt/kf6/share/polkit-1 {destdir}/usr/share/polkit-1 &&
            rm -rf {destdir}/opt/kf6/share/polkit-1
        fi""",

    # Replace directories with symlinks (explicit + safe)
    f"""rm -rf {destdir}$KF6_PREFIX/etc/dbus-1 &&
        ln -sfn /etc/dbus-1 {destdir}$KF6_PREFIX/etc/dbus-1""",

    f"""rm -rf {destdir}$KF6_PREFIX/share/dbus-1 &&
        ln -sfn /usr/share/dbus-1 {destdir}$KF6_PREFIX/share/dbus-1 &&
        ln -sfn /usr/share/polkit-1 {destdir}$KF6_PREFIX/share/polkit-1""",

    # Make tarball + manifests
    f"mkdir -p {outputdir} && cd {destdir} && tar --transform 's|^\\.||' -I zstd -cf {outputdir}/{pkgname}-{pkgver}.tar.zst .",
    f"mkdir -p {manifestdir} && tar -tf {outputdir}/{pkgname}-{pkgver}.tar.zst | grep -v '/$' > {manifestdir}/{pkgname}.txt",

    # Cleanup
    f"rm -rf {fembuilddir}"
]

triggers = [
        f"cd /tmp && find /opt -maxdepth 1 -type d -name \"kf6-*\" ! -name \"kf6-{pkgver}\" -exec rm -rf {{}} +",
        f"/sbin/ldconfig"
]