#!/bin/bash

BACKUP_DIR="/usr/share/biglinux/applications-name"

has_text() {
    [[ "$(< "$1")" == *"$2"* ]]
}

hide_app() {
    local file="$1"
    [[ -f "$file" ]] || return
    
    if ! has_text "$file" "NoDisplay=true"; then
        sed -i 's|Categories=|NoDisplay=true\nCategories=|' "$file"
    fi
}

hide_in_env() {
    local file="$1"
    local env="$2"
    [[ -f "$file" ]] || return

    if ! has_text "$file" "NotShowIn=$env"; then
        sed -i "s|Categories=|NotShowIn=$env\nCategories=|" "$file"
    fi
}

apps_to_hide=(
    "/usr/share/applications/org.kde.kwrite.desktop"
    "/usr/share/applications/ipython.desktop"
    "/usr/share/applications/display-im6.q16.desktop"
    "/usr/share/applications/libreoffice-startcenter.desktop"
    "/usr/share/applications/urxvtc.desktop"
    "/usr/share/applications/urxvt.desktop"
    "/usr/share/applications/urxvt-tabbed.desktop"
    "/usr/share/applications/org.kde.kdeconnect.sms.desktop"
    "/usr/share/applications/org.kde.kdeconnect_open.desktop"
    "/usr/share/applications/kde_wacom_tabletfinder.desktop"
    "/usr/share/applications/yad-icon-browser.desktop"
    "/usr/share/applications/yad-settings.desktop"
    "/usr/share/applications/rxvt-unicode.desktop"
    "/usr/share/applications/gscriptor.desktop"
    "/usr/share/applications/org.kde.latte-dock.desktop"
    "/usr/share/applications/htop.desktop"
    "/usr/share/applications/avahi-discover.desktop"
    "/usr/share/applications/bssh.desktop"
    "/usr/share/applications/bvnc.desktop"
    "/usr/share/applications/bootsplash-manager.desktop"
    "/usr/share/applications/tlpui.desktop"
    "/usr/share/applications/qv4l2.desktop"
    "/usr/share/applications/qvidcap.desktop"
    "/usr/share/applications/lstopo.desktop"
    "/usr/share/applications/org.kde.kuserfeedback-console.desktop"
    "/usr/share/applications/designer.desktop"
    "/usr/share/applications/assistant.desktop"
    "/usr/share/applications/linguist.desktop"
    "/usr/share/applications/qdbusviewer.desktop"
    "/usr/share/applications/lftp.desktop"
    "/usr/share/applications/uxterm.desktop"
    "/usr/share/applications/xterm.desktop"
    "/usr/share/applications/org.kde.drkonqi.coredump.gui.desktop"
    "/usr/share/applications/org.kde.drkonqi.desktop"
    "/usr/share/applications/pcmanfm-qt.desktop"
    "/usr/share/applications/obconf-qt.desktop"
    "/usr/share/applications/xscreensaver-properties.desktop"
    "/usr/share/applications/nvtop.desktop"
)

for app in "${apps_to_hide[@]}"; do
    hide_app "$app"
done

# Hide KDE
apps_hide_kde=(
    "/usr/share/applications/compton-conf.desktop"
    "/usr/share/applications/pcmanfm-qt-desktop-pref.desktop"
)
for app in "${apps_hide_kde[@]}"; do
    hide_in_env "$app" "KDE"
done

# Hide LXQt
hide_in_env "/usr/share/applications/hp-uiscan.desktop" "LXQt"

# KInfoCenter
f="/usr/share/applications/org.kde.kinfocenter.desktop"
[[ -f "$f" ]] && sed -i 's/Documentation;//' "$f"

# HP Icons
sed -i 's/Icon=.*/Icon=hp_logo/' /usr/share/applications/bigcontrolcenter/hplip.desktop /usr/share/applications/hplip.desktop 2>/dev/null
sed -i 's/Icon=.*/Icon=scanner-hp/' /usr/share/applications/bigcontrolcenter/hp-uiscan.desktop /usr/share/applications/hp-uiscan.desktop 2>/dev/null

# Kate
f="/usr/share/applications/org.kde.kate.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Anotações|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g;s|Development;||g' "$f"

# Steam
f="/usr/share/applications/steam.desktop"
[[ -f "$f" ]] && sed -i 's|Steam (Runtime)|Steam|g;s|Categories=Network;FileTransfer;Game;|Categories=Game;|g' "$f"

# Gufw
f="/usr/share/applications/bigcontrolcenter/gufw.desktop"
if [[ -f "$f" ]]; then
    sed -i 's|Name=.*|Name=Firewall|g;s|Categories=.*|Categories=System|g' "$f"
    sed -i 's|Exec=gufw|Exec=bigsudo gufw-pkexec|g' "$f"
fi

# KDE Connect
f="/usr/share/applications/org.kde.kdeconnect.app.desktop"
[[ -f "$f" ]] && sed -i 's|kdeconnect-app|kdeconnect-settings|g;s|Name\[pt_BR\]=.*|Name[pt_BR]=Interagir com dispositivos Android|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g;s|Categories=Qt;KDE;Network|Categories=Qt;KDE;Utility|g;' "$f"

# ==============================================================================
# LIBREOFFICE & BACKUPS
# ==============================================================================

restore_check() {
    local target="$1"
    local source="$BACKUP_DIR/$2"
    local pattern="$3"
    
    [[ -f "$target" ]] || return
    if ! has_text "$target" "$pattern"; then
        [[ -f "$source" ]] && cp -f "$source" "$target"
    fi
}

restore_check "/usr/lib/libreoffice/share/xdg/xsltfilter.desktop" "xsltfilter.desktop" 'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/math.desktop"       "math.desktop"       'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/impress.desktop"    "impress.desktop"    'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/base.desktop"       "base.desktop"       'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/calc.desktop"       "calc.desktop"       'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/draw.desktop"       "draw.desktop"       'Name\[pt_BR\]='
restore_check "/usr/lib/libreoffice/share/xdg/writer.desktop"     "writer.desktop"     'Name\[pt_BR\]='

# Category LibreOffice
[[ -f /usr/share/applications/libreoffice-math.desktop ]] && \
    sed -i '/Categories=/s/Education;//;/Categories=/s/Science;//;/Categories=/s/Math;//' /usr/share/applications/libreoffice-math.desktop

[[ -f /usr/share/applications/libreoffice-draw.desktop ]] && \
    sed -i '/Categories=/s/Graphics;//;/Categories=/s/2DGraphics;//' /usr/share/applications/libreoffice-draw.desktop

# ==============================================================================
# MORE APPS
# ==============================================================================

# Gimp
f="/usr/share/applications/gimp.desktop"
[[ -f "$f" ]] && sed -i "s|Name\[pt_BR\]=Editor de imagem|Name[pt_BR]=Editor de imagens Gimp|g" "$f"

# XScreensaver & Simple Scan (Append block)
append_pt_block() {
    local f="$1"
    local name="$2"
    [[ -f "$f" ]] || return
    if ! has_text "$f" 'Name[pt]'; then
        printf "Name[pt]=%s\nGenericName[pt]=\nComment[pt]=\n" "$name" >> "$f"
    fi
}
append_pt_block "/usr/share/applications/xscreensaver-properties.desktop" "Protetor de tela"
append_pt_block "/usr/share/applications/simple-scan.desktop" "Digitalizador de imagens"

# Skanpage
f="/usr/share/applications/org.kde.skanpage.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Digitalizador de imagens Skanpage|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# KWalletManager
f="/usr/share/applications/org.kde.kwalletmanager5.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Gerenciar senhas no sistema|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Okular
f="/usr/share/applications/org.kde.okular.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Visualizador de PDF, Epub e outros|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g;s|Categories=.*|Categories=Qt;KDE;Office;Viewer;|g' "$f"

# Gwenview
f="/usr/share/applications/org.kde.gwenview.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Visualizador de imagens|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# KMines
f="/usr/share/applications/org.kde.kmines.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Campo minado|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Restaurações baseadas em nome original (Inglês)
restore_check "/usr/share/applications/guvcview.desktop" "guvcview.desktop" 'Name=Webcam Guvc'
restore_check "/usr/share/applications/org.strawberrymusicplayer.strawberry.desktop" "org.strawberrymusicplayer.strawberry.desktop" 'Name=Music Player Strawberry'
restore_check "/usr/share/applications/rustdesk.desktop" "rustdesk.desktop" 'Name=Remote Desktop RustDesk'
restore_check "/usr/share/applications/smplayer.desktop" "smplayer.desktop" 'Name=Video Player SMPlayer'
restore_check "/usr/share/applications/net.nokyan.Resources.desktop" "net.nokyan.Resources.desktop" 'Name=Keep an eye on system resources'

# VokoscreenNG
f="/usr/share/applications/vokoscreenNG.desktop"
if [[ -f "$f" ]] && [[ -e "$BACKUP_DIR/guvcview.desktop" ]]; then
    if ! has_text "$f" 'Name\[pt_BR\]='; then
        sed -i '/Name=/a Name[pt_BR]=Gravador de tela Voko\nComment[pt_BR]=' "$f"
        sed -i '/Name=/a Name[pt]=Gravador de tela Voko\nComment[pt]=' "$f"
    fi
fi

# Lutris
f="/usr/share/applications/net.lutris.Lutris.desktop"
[[ -f "$f" ]] && sed -i 's|Comment\[pt-BR\]=.*|Name[pt]=Plataforma de jogos Lutris|g;s|Comment\[id\]=.*|Comment[pt]=|g' "$f"

# Calculadora
f="/usr/share/applications/org.gnome.Calculator.desktop"
if [[ -f "$f" ]] && has_text "$f" 'GenericName\[pt]'; then
    echo 'GenericName[pt]=Calculadora' >> "$f"
    echo 'Name[pt]=Calculadora' >> "$f"
fi

# Spectacle
f="/usr/share/applications/org.kde.spectacle.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=Spectacle|Name[pt_BR]=Captura de tela|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Ark
f="/usr/share/applications/org.kde.ark.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Compactador de Arquivos|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# KFind
f="/usr/share/applications/org.kde.kfind.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Procurar arquivos|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g;s|OnlyShowIn=KDE;||g' "$f"

# Konsole
f="/usr/share/applications/org.kde.konsole.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=Konsole|Name[pt_BR]=Terminal|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Dolphin
f="/usr/share/applications/org.kde.dolphin.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Gerenciador arquivos|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Mintstick
sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Criar pen drive de boot|g' /usr/share/applications/mintstick.desktop 2>/dev/null
sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Criar pen drive de boot|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' /usr/share/applications/mintstick-kde.desktop 2>/dev/null

# Mintstick Format
sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Formatar pen drive|g' /usr/share/applications/mintstick-format.desktop 2>/dev/null
sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Formatar pen drive|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' /usr/share/applications/mintstick-format-kde.desktop 2>/dev/null

# System Settings
f="/usr/share/applications/kdesystemsettings.desktop"
[[ -f "$f" ]] && sed -i 's|preferences-system|breeze-settings|g;' "$f"

# KSysGuard
f="/usr/share/applications/org.kde.ksysguard.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Gerenciar tarefas|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# GParted
f="/usr/share/applications/gparted.desktop"
if [[ -f "$f" ]] && ! has_text "$f" 'Name\[pt]=GParted'; then
    sed -i 's|GenericName\[pt_BR\]=.*||g;s|Name\[pt_BR\]=.*||g;s|GenericName\[pt\]=.*|GenericName[pt]=|g;s|Name\[pt\]=.*|Name[pt]=Formatar ou particionar|g' "$f"
fi

# Onboard
rm -f /usr/share/applications/onboard-settings.desktop
f="/usr/share/applications/onboard.desktop"
if [[ -f "$f" ]] && has_text "$f" 'Name\[pt]'; then
    printf "Name[pt]=Teclado virtual\nGenericName[pt]=\nComment[pt]=\n" >> "$f"
    sed -i 's|Accessibility;||g' "$f"
fi

# Browsers
f="/usr/share/applications/google-chrome.desktop"
if [[ -f "$f" ]] && has_text "$f" 'Name\[pt_BR\]='; then
    sed -i '/GenericName\[pt_BR\]=/a Name[pt_BR]=Navegador Google Chrome' "$f"
    sed -i 's|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"
fi

f="/usr/share/applications/brave-browser.desktop"
[[ -f "$f" ]] && sed -i '/GenericName\[pt_BR\]=Navegador da Internet/a Name[pt_BR]=Navegador Brave' "$f"

f="/usr/share/applications/firefox.desktop"
[[ -f "$f" ]] && sed -i 's|GenericName\[pt_BR\]=.*|Name[pt_BR]=Navegador Firefox|g' "$f"

# qBittorrent
f="/usr/share/applications/org.qbittorrent.qBittorrent.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Cliente qBittorrent|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# KPat
f="/usr/share/applications/org.kde.kpat.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Paciência, Freecell e outros|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# Klipper
f="/usr/share/applications/org.kde.klipper.desktop"
[[ -f "$f" ]] && sed -i 's|Name\[pt_BR\]=.*|Name[pt_BR]=Histórico de copiar e colar|g;s|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"

# WPS Office
for app in "et:WPS Planilhas (Spreadsheets)" "wpp:WPS Apresentações (Presentation)" "wps:WPS Editor de textos (Writer)"; do
    suffix="${app%%:*}"
    name="${app#*:}"
    f="/usr/share/applications/wps-office-${suffix}.desktop"
    if [[ -f "$f" ]] && ! has_text "$f" 'Name\[pt_BR\]='; then
        sed -i "/GenericName=/a Name[pt_BR]=$name\nGenericName[pt_BR]= \nComment[pt_BR]=" "$f"
    fi
done
[[ -f /etc/xdg/menus/applications-merged/wps-office.menu ]] && sed -i 's/^/#/' /etc/xdg/menus/applications-merged/wps-office.menu

# XScreensaver Category
f="/usr/share/applications/xscreensaver-properties.desktop"
[[ -f "$f" ]] && sed -i 's|Categories=Settings;DesktopSettings;Security;X-XFCE;|Categories=System;DesktopSettings;Security;X-XFCE;|' "$f"

# OpenJDK
sed -i 's|cautious-launcher %f /usr/bin/java -jar|/usr/bin/java -jar %f|' /usr/share/applications/openjdk*.desktop 2>/dev/null
f="/usr/share/applications/openjdk-8-policytool.desktop"
if [[ -f "$f" ]] && has_text "$f" 'Name\[pt_BR\]='; then
    sed -i '/Name=/a Name[pt_BR]=Regras de segurança do Java\nComment[pt_BR]=' "$f"
fi

# Timeshift
f="/usr/share/applications/timeshift-gtk.desktop"
if [[ -f "$f" ]] && has_text "$f" 'Name\[pt_BR\]='; then
    sed -i '/GenericName\[ca\]=/a Name[pt_BR]=Backups e snapshots' "$f"
    printf "Comment[pt_BR]=\nGenericName[pt_BR]=\n" >> "$f"
    sed -i 's|Comment\[pt_BR\]=.*|Comment[pt_BR]=|g;s|GenericName\[pt_BR\]=.*|GenericName[pt_BR]=|g' "$f"
fi

# Keyboard
f="/etc/default/keyboard"
if [[ -f "$f" ]] && has_text "$f" 'XKBOPTIONS=""'; then
    sed -i 's|XKBOPTIONS=""|XKBOPTIONS="terminate:ctrl_alt_bksp"|g' "$f"
fi

# Nvidia
f="/usr/share/applications/nvidia-settings.desktop"
if [[ -f "$f" ]]; then
    [[ -f /usr/share/applications/org.manjaro.pamac.manager.desktop ]] && \
        sed -i 's|Categories=.*|Categories=Settings;|g' /usr/share/applications/org.manjaro.pamac.manager.desktop
    
    if ! has_text "$f" "Name\[pt_BR\]="; then
        echo 'Name[pt_BR]=Configure NVIDIA' >> "$f"
    else
        sed -i "s/^Name\[pt_BR\]=.*/Name[pt_BR]=Configure NVIDIA/" "$f"
    fi
fi

# Kvantum & AppImageLauncher
update_settings_app() {
    local f="$1"
    local name="$2"
    [[ -f "$f" ]] || return
    sed -i '/^Categories/ s/.*/Categories=Settings;DesktopSettings;LXQt;X-XFCE-SettingsDialog;X-XFCE-PersonalSettings;X-GNOME-PersonalSettings;/' "$f"
    if has_text "$f" "Name\[pt_BR\]="; then
        sed -i "s/^Name\[pt_BR\].*/Name[pt_BR]=$name/" "$f"
    else
        echo "Name[pt_BR]=$name" >> "$f"
    fi
}

update_settings_app "/usr/share/applications/kvantummanager.desktop" "Kvantum"
update_settings_app "/usr/share/applications/appimagelaunchersettings.desktop" "Configurações do AppImage"
