#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess
import libcalamares # type: ignore
from libcalamares import globalstorage, utils # type: ignore


def pretty_name():
    return "System bootstrap"


def run_cmd(cmd):
    utils.debug(f"[bootstrap] $ {cmd}")

    proc = subprocess.run(
        cmd,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True,
    )

    if proc.returncode != 0:
        utils.error(proc.stderr)
        return (
            "Bootstrap command failed",
            f"Command:\n{cmd}\n\nExit code: {proc.returncode}\n\n{proc.stderr}",
        )

    if proc.stdout:
        utils.debug(proc.stdout)

    return None


def get_uuid(device):
    """Return the UUID string of a block device, e.g. /dev/sda2"""
    try:
        out = subprocess.run(
            ["blkid", "-s", "UUID", "-o", "value", device],
            check=True, capture_output=True, text=True
        )
        return out.stdout.strip()
    except subprocess.CalledProcessError:
        raise RuntimeError(f"Failed to get UUID for {device}")

def deobscure(obscured: str) -> str:
    result = []
    for c in obscured:
        code = ord(c)
        if code <= 0x21:
            result.append(c)
        else:
            result.append(chr(0x1001F - code))
    return ''.join(result)


def run():
    partitions = globalstorage.value("partitions")

    ROOT_DEVICE = None
    EFI_DEVICE = None

    for p in partitions:
        fs = p.get("fsName")
        if fs == "ext4":
            ROOT_DEVICE = p.get("device")
        elif fs == "fat32":
            EFI_DEVICE = p.get("device")

    locale_conf = globalstorage.value("localeConf")
    LOCALE = locale_conf.get("LANG")

    # normalize:
    if LOCALE.lower().endswith(".utf8"):
        LOCALE = LOCALE[:-5] + ".UTF-8"

    obspass = globalstorage.value("password")
    PASSWORD = deobscure(obspass)

    locationRegion = globalstorage.value("locationRegion")
    locationZone = globalstorage.value("locationZone")
    TIMEZONE = locationRegion + "/" + locationZone

    # ---- read Calamares state ----
    USER = globalstorage.value("username")
    KEYBOARD = globalstorage.value("keyboardLayout")
    HOSTNAME = globalstorage.value("hostname")
    ROOT_UUID = get_uuid(ROOT_DEVICE)
    EFI_UUID = get_uuid(EFI_DEVICE)

    # ----     RANDOM VARS      ---- 
    mount_dir = "/mnt/femos"
    caelestia_kb_sed = f"sed -i 's/kb_layout = us/kb_layout = {KEYBOARD}/' /home/{USER}/.config/hypr/hyprland/input.conf"
    kde_kb_sed = f"sed -i 's/LayoutList=us/LayoutList={KEYBOARD}/' /home/{USER}/.config/kxkbrc"

    #if not ROOT:
    #    return ("Installer error", "rootMountPoint is not set")

    utils.debug(f"[bootstrap] root = {ROOT_DEVICE}")

    # ---- your shell-driven bootstrap ----
    commands_install = [
        f"mkdir -p /mnt/femos",
        f"mount {ROOT_DEVICE} {mount_dir}",
        f"cd {mount_dir} && wget https://rocketleaguechatp.duckdns.org/femboyos-latest-$(cat /var/tmp/edition).tar.xz",
        f"cd {mount_dir} && tar --xattrs --acls --numeric-owner -xvJpf femboyos-latest-$(cat /var/tmp/edition).tar.xz",
        f"arch-chroot {mount_dir} userdel -rf femboyos-user",
        f"arch-chroot {mount_dir} useradd -m -G audio,video,input,netdev,wheel,power {USER}",
        f"arch-chroot {mount_dir} changepass {USER} {PASSWORD}",
        f"arch-chroot {mount_dir} changepass root {PASSWORD}",
        f"mkdir -p {mount_dir}/boot/efi && mount {EFI_DEVICE} {mount_dir}/boot/efi",
        f"arch-chroot {mount_dir} grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable",
        f"arch-chroot {mount_dir} sh -c 'KERNEL=$(ls /boot/vmlinuz-* | sed \"s|.*/vmlinuz-||\") && dracut -f -v /boot/initramfs-$KERNEL.img $KERNEL'",
        f"arch-chroot {mount_dir} grub-mkconfig -o /boot/grub/grub.cfg",
        f"rm -rf {mount_dir}/etc/localtime || true",
        f"ln -sf /usr/share/zoneinfo/{TIMEZONE} {mount_dir}/etc/localtime",
        f"arch-chroot {mount_dir} fempkg update",
        f"arch-chroot {mount_dir} fempkg install fempkg-keys",
        f"sed -i 's/en_US.UTF-8/{LOCALE}/' {mount_dir}/etc/profile.d/i18n.sh",
        f"arch-chroot {mount_dir} sh -c 'HOME=/root GNUPGHOME=/root/.gnupg gpu-driver-femos'",
        f"arch-chroot {mount_dir} su {USER} - -c 'xdg-user-dirs-update --force'",
        f"arch-chroot {mount_dir} su {USER} - -c 'cp -vr /etc/sampleconfigs/.config ~/'",
        f"arch-chroot {mount_dir} su {USER} - -c 'flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo --user'",

        # lets not talk about this part, plwease
        f"cp -v /var/tmp/edition {mount_dir}/var/tmp/edition",
f"""cat > {mount_dir}/var/tmp/set_kb.sh << 'EOF'
EDITION=$(tr -d "[:space:]" </var/tmp/edition 2>/dev/null)
if [ "$EDITION" = "caelestia" ]; then
    {caelestia_kb_sed} || exit 1
elif [ "$EDITION" = "plasma" ]; then
    {kde_kb_sed} || exit 1
else
    echo "Unknown edition: $EDITION" >&2
    exit 1
fi
EOF""",
        f"arch-chroot {mount_dir} sh /var/tmp/set_kb.sh",


        f"rm -rf {mount_dir}/etc/sampleconfigs",
        f"rm -rf {mount_dir}/femboyos-latest*.tar.xz",
        f"arch-chroot {mount_dir} udev-hwdb update",
        f"arch-chroot {mount_dir} dbus-uuidgen > {mount_dir}/var/lib/dbus/machine-id",
        f"echo \"{USER}\" > {mount_dir}/var/lib/fempkg/username",
        f"echo \"{HOSTNAME}\" > {mount_dir}/etc/hostname",
        f"sed -i 's/baf3c66f-9874-435c-ac9b-b672ec5f1fa4/{ROOT_UUID}/' {mount_dir}/etc/fstab",
        f"sed -i 's/6182-0402/{EFI_UUID}/' {mount_dir}/etc/fstab",

        
        # easter egg :p
        f"[[ \"{USER}\" == \"flamewall\" ]] && mkdir -p /home/{USER}/Pictures/Wallpapers && cp -v /usr/share/flamewall.jpg {mount_dir}/home/{USER}/Pictures/Wallpapers/flamewall.jpg && arch-chroot "
        f"{mount_dir} chown {USER}:{USER} /home/{USER}/Pictures/Wallpapers/flamewall.jpg && arch-chroot {mount_dir} su {USER} - -c 'caelestia wallpaper -f "
        f"/home/{USER}/Pictures/Wallpapers/flamewall.jpg' || true",


        f"[[ \"{USER}\" == \"amethyst\" ]] && mkdir -p /home/{USER}/Pictures/Wallpapers && cp -v /usr/share/amethyst.jpg {mount_dir}/home/{USER}/Pictures/Wallpapers/amethyst.jpg && arch-chroot "
        f"{mount_dir} chown {USER}:{USER} /home/{USER}/Pictures/Wallpapers/amethyst.jpg && arch-chroot {mount_dir} su {USER} - -c  'caelestia wallpaper -f "
        f"/home/{USER}/Pictures/Wallpapers/amethyst.jpg'  || true",
    ]



    for cmd in commands_install:
        cmd = cmd.format(
            r=ROOT_DEVICE,
            hostname=HOSTNAME,
            tz=TIMEZONE,
            locale=LOCALE,
        )

        err = run_cmd(cmd)
        if err:
            return err
        


    # ---- done ----
    utils.debug("[bootstrap] finished successfully")
    return None
