#!/usr/bin/env fish

if not test -x fastfetch
    return
end

set -l whole_text (fastfetch --pipe --help)
set modules_complex (fastfetch --list-modules autocompletion)

complete -c fastfetch -f

for line in (string match -- '    -*' $whole_text)
    set -l kv (string split -n ':' $line -m1)
    set -l args (string trim -- $kv[1])
    set -l desc (string trim -- $kv[2])

    if string match -q -- '--<*' $args # ignore --<module>-*
        continue
    end

    set -l res -c fastfetch
    set -l regexp '<\??[\w=]+>'

    switch (string match -r -- $regexp $args)
    case '<\?command>'
        set -l temp (string match -r "\\w+" $modules_complex | string lower)
        set -l temp $temp-format"\tModule\\ format"
        set res $res -x -a "color\tSupported\\ colors format\tCustom\\ format config\tConfiguration $temp"
    case '<\?bool>'
        set res $res -x -a "true\tBool false\tBool"
    case '<config>'
        set -l presets (fastfetch --list-presets autocompletion)"\tPreset"
        set res $res -r -a "none\tDisable $presets"
    case '<path>'
        set res $res -F -r
    case '<num>'
        set res $res -x -a "0\tNumber 1\tNumber 2\tNumber 3\tNumber 4\tNumber 5\tNumber 6\tNumber 7\tNumber 8\tNumber 9\tNumber"
    case '<\?num>'
        set res $res -x -a "0\tNumber 1\tNumber 2\tNumber 3\tNumber 4\tNumber 5\tNumber 6\tNumber 7\tNumber 8\tNumber 9\tNumber"
    case '<structure>'
        function __fastfetch_complete_structure
            for line in $modules_complex
                set -l pair (string split -m 2 : $line)
                echo -e "$pair[1]\t$pair[2]"
            end
        end
        set res $res -x -a "(__fish_complete_list : __fastfetch_complete_structure)"
    case '<logo>'
        set -l temp (fastfetch --list-logos autocompletion)
        set -l temp (string replace -- ' ' '\\ ' $temp)
        set -l temp $temp"\tBuiltin"
        set res $res -x -a "none\tNone small\tSmall $temp"
    case '<color>'
        set res $res -x -a "black\tColor red\tColor green\tColor yellow\tColor blue\tColor magenta\tColor cyan\tColor white\tColor default\tColor"
    case '<*>'
        set res $res -x
    case '*'
        set res $res -f
    end

    set args (string replace -r -- $regexp '' $args | string split ',' | string trim)

    for arg in $args
        if string match -q -- '--*' $arg
            set res $res -l (string sub -s 3 -- $arg)
        else
            set res $res -o (string sub -s 2 -- $arg)
        end
    end
    complete $res -d (string replace -- ' (+)' '' $desc)
end
