#!/bin/bash

_set_gtk2_im_module() {
    local file="$1"

    install -d -m755 "$(dirname "$file")"

    if [[ ! -f "$file" ]]; then
        printf 'gtk-im-module="fcitx"\n' > "$file"
        return
    fi

    if grep -q '^gtk-im-module=' "$file"; then
        sed -i 's/^gtk-im-module=.*/gtk-im-module="fcitx"/' "$file"
    else
        printf '\ngtk-im-module="fcitx"\n' >> "$file"
    fi
}

_set_gtk_im_module_ini() {
    local file="$1"
    local tmp

    install -d -m755 "$(dirname "$file")"

    if [[ ! -f "$file" ]]; then
        cat > "$file" <<'CONFIG'
[Settings]
gtk-im-module=fcitx
CONFIG
        return
    fi

    tmp="$(mktemp)"

    if grep -q '^\[Settings\]$' "$file"; then
        if awk '
            BEGIN { in_settings=0; found=0 }
            /^\[Settings\]$/ { in_settings=1; next }
            /^\[/ { in_settings=0 }
            in_settings && /^gtk-im-module=/ { found=1 }
            END { exit(found ? 0 : 1) }
        ' "$file"; then
            awk '
                BEGIN { in_settings=0 }
                /^\[Settings\]$/ { in_settings=1; print; next }
                /^\[/ { in_settings=0; print; next }
                in_settings && /^gtk-im-module=/ {
                    print "gtk-im-module=fcitx"
                    next
                }
                { print }
            ' "$file" > "$tmp" && mv "$tmp" "$file"
        else
            awk '
                BEGIN { in_settings=0; inserted=0 }
                /^\[Settings\]$/ {
                    in_settings=1
                    print
                    next
                }
                /^\[/ {
                    if (in_settings && !inserted) {
                        print "gtk-im-module=fcitx"
                        inserted=1
                    }
                    in_settings=0
                    print
                    next
                }
                { print }
                END {
                    if (in_settings && !inserted) {
                        print "gtk-im-module=fcitx"
                    }
                }
            ' "$file" > "$tmp" && mv "$tmp" "$file"
        fi
    else
        cat "$file" > "$tmp"
        printf '\n[Settings]\ngtk-im-module=fcitx\n' >> "$tmp"
        mv "$tmp" "$file"
    fi
}

_catos_fcitx5_configure_gtk_im_module() {
    local skel_dir="/etc/skel"
    local gtk2_file="${skel_dir}/.gtkrc-2.0"
    local gtk3_file="${skel_dir}/.config/gtk-3.0/settings.ini"
    local gtk4_file="${skel_dir}/.config/gtk-4.0/settings.ini"

    install -d -m755 \
        "${skel_dir}/.config/gtk-3.0" \
        "${skel_dir}/.config/gtk-4.0"

    _set_gtk2_im_module "$gtk2_file"
    _set_gtk_im_module_ini "$gtk3_file"
    _set_gtk_im_module_ini "$gtk4_file"
}

post_install() {
    _catos_fcitx5_configure_gtk_im_module
}

post_upgrade() {
    _catos_fcitx5_configure_gtk_im_module
}
