if not type -q fastfetch
    exit
end

command -q python3
if test $status -ne 0
    exit
end

complete -c fastfetch -f

function __fastfetch_complete_bool
    echo -e "true\tBool"
    echo -e "false\tBool"
end

function __fastfetch_complete_color
    echo -e "black\tColor"
    echo -e "red\tColor"
    echo -e "green\tColor"
    echo -e "yellow\tColor"
    echo -e "blue\tColor"
    echo -e "magenta\tColor"
    echo -e "cyan\tColor"
    echo -e "white\tColor"
    echo -e "default\tColor"
end

function __fastfetch_complete_command
    for line in (fastfetch --list-modules autocompletion)
        set -l pair (string split -m 2 : $line)
        set -l module (string lower $pair[1])

        echo -e "$module-format\tModule format"
    end
    echo -e "format\tCustom format"
    echo -e "color\tColor format"
end

function __fastfetch_complete_config
    for line in (fastfetch --list-presets autocompletion)
        echo -e "$line\tPreset"
    end
    echo -e "none\tDisable loading config file"
end

function __fastfetch_complete_logo
    for line in (fastfetch --list-logos autocompletion)
        echo -e "$line\tBuiltin logo"
    end
    echo -e "none\tDon't print logo"
    echo -e "small\tPrint small ascii logo if available"
end

function __fastfetch_complete_structure
    for line in (fastfetch --list-modules autocompletion)
        set -l pair (string split -m 2 : $line)
        echo -e "$pair[1]\t$pair[2]"
    end
end

echo '
import json, subprocess, sys


def main():
    data: dict[str, list[dict]] = json.loads(subprocess.check_output(["fastfetch", "--help-raw"]))

    for key in data:
        for flag in data[key]:
            if flag["long"] == "logo-color-[1-9]":
                for i in range(1, 10):
                    print(f"""complete -c fastfetch -d "{flag["desc"]}" -l "logo-color-{i}" -x -a "(__fastfetch_complete_color)" """)
                continue

            if flag.get("pseudo", False):
                continue

            command_prefix = f"""complete -c fastfetch -d "{flag["desc"]}" -l "{flag["long"]}\""""
            if "short" in flag:
                command_prefix += f""" -o {flag["short"]}"""

            if "arg" in flag:
                type: str = flag["arg"]["type"]
                if type == "bool":
                    print(f"{command_prefix} -x -a \"(__fastfetch_complete_bool)\"")
                elif type == "color":
                    print(f"{command_prefix} -x -a \"(__fastfetch_complete_color)\"")
                elif type == "command":
                    print(f"{command_prefix} -x -a \"(__fastfetch_complete_command)\"")
                elif type == "config":
                    print(f"{command_prefix} -x -a \"(__fastfetch_complete_config)\"")
                elif type == "enum":
                    temp: str = " ".join(flag["arg"]["enum"])
                    print(f"{command_prefix} -x -a \"{temp}\"")
                elif type == "logo":
                    print(f"{command_prefix} -x -a \"(__fastfetch_complete_logo)\"")
                elif type == "structure":
                    print(f"{command_prefix} -x -a \"(__fish_complete_list : __fastfetch_complete_structure)\"")
                elif type == "path":
                    print(f"{command_prefix} -r -F")
                else:
                    print(f"{command_prefix} -x")
            else:
                print(f"{command_prefix} -f")


if __name__ == "__main__":
    try:
        main()
    except:
        sys.exit(1)
' | python3 | source
