#!/bin/sh

# gnucego-postinstall.sh — parte do projeto GNUcego.
# Copyright (C) 2026 GNUcego contributors
#
# Este programa é SOFTWARE LIVRE: você pode redistribuí-lo e/ou modificá-lo
# sob os termos da GNU General Public License (GPL) publicada pela
# Free Software Foundation — versão 3 da Licença, ou (à sua escolha)
# qualquer versão posterior.
#
# Este programa é distribuído na esperança de ser útil, mas SEM QUALQUER
# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de
# ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU General Public License
# para mais detalhes.
#
# Você deve ter recebido uma cópia da GNU General Public License junto
# com este programa. Se não, veja <https://www.gnu.org/licenses/>.

# GNUcego pós-instalação (roda dentro de /target via preseed late_command)
# Responsável por: identidade GNUcego (sem "Debian"), linux-libre,
# fastfetch, locale pt_BR, wallpaper (GRUB/GDM/LightDM/SDDM).
# Sem set -e: qualquer falha nao deve travar o "finalizando a instalacao".

BASE="http://repo.gnucego.com.br"

echo "=== GNUcego post-install ==="

# ---------------------------------------------------------------
# 1) sources.list base (main + security + updates) - HTTP
# ---------------------------------------------------------------
cat > /etc/apt/sources.list <<EOF
deb $BASE trixie main extra
deb $BASE trixie-security main
deb $BASE trixie-updates main
EOF
apt-get update || true

# ---------------------------------------------------------------
# 2) chave GNUcego (copiada para /tmp pelo instalador)
# ---------------------------------------------------------------
if [ -f /tmp/gnucego-keyring.deb ]; then
    dpkg -i /tmp/gnucego-keyring.deb || true
fi

# 3) repositorio extra (kernel linux-libre, icecat, pentest) ja incluido em 'main extra' acima.

# ---------------------------------------------------------------
# 4) GNU Linux-libre: kernel + headers ja instalados DURANTE a instalacao
#    (kernel via base-installer/kernel.sh; headers via pkgsel/include).
#    NAO ha kernel Debian residual para remover (instalamos linux-libre direto),
#    entao NAO rodamos autoremove aqui (ele demorava minutos removendo
#    centenas de pacotes orfaos).
# ---------------------------------------------------------------


# ---------------------------------------------------------------
# 5) IDENTIDADE (rebranding: GNUcego, sem "Debian")
# ---------------------------------------------------------------
cat > /etc/os-release <<'EOF'
NAME="GNUcego GNU/Linux-libre"
VERSION="2026.2 LTS"
ID=gnucego
ID_LIKE=debian
PRETTY_NAME="GNUcego GNU/Linux-libre 2026.2 LTS"
VERSION_CODENAME=exu
ANSI_COLOR="1;31"
HOME_URL="https://gnucego.com.br"
SUPPORT_URL="https://gnucego.com.br"
BUG_REPORT_URL="https://gnucego.com.br"
EOF

cat > /etc/lsb-release <<'EOF'
DISTRIB_ID=GNUcego
DISTRIB_RELEASE=2026.2
DISTRIB_CODENAME=exu
DISTRIB_DESCRIPTION="GNUcego GNU/Linux-libre 2026.2 LTS"
EOF

# issue / issue.net: apenas "GNUcego GNU/Linux-libre" (sem versao/slogan),
# conforme solicitado. Aparece antes do login.
cat > /etc/issue <<'EOF'
GNUcego GNU/Linux-libre \n \l
EOF
cat > /etc/issue.net <<'EOF'
GNUcego GNU/Linux-libre
EOF

# versão própria do sistema
echo "GNUcego GNU/Linux-libre 2026.2 LTS" > /etc/gnucego_version

# GRUB: identidade do distribuidor sem duplicacao.
# O /etc/grub.d/10_linux adiciona " GNU/Linux" a GRUB_DISTRIBUTOR quando este
# NAO termina em "GNU/Linux". Para exibir "GNUcego GNU/Linux-libre" (sem o
# "GNU/Linux" extra), ajustamos o case do 10_linux para reconhecer "-libre".
if [ -f /etc/default/grub ]; then
    sed -i 's/^GRUB_DISTRIBUTOR=.*/GRUB_DISTRIBUTOR="GNUcego GNU\/Linux-libre exu (estavel)"/' /etc/default/grub
    # cores do menu em vermelho/vermelho-escuro (tema GNUcego)
    grep -q '^GRUB_COLOR_NORMAL=' /etc/default/grub || echo 'GRUB_COLOR_NORMAL="white/black"' >> /etc/default/grub
    sed -i 's/^GRUB_COLOR_NORMAL=.*/GRUB_COLOR_NORMAL="white\/black"/' /etc/default/grub
    grep -q '^GRUB_COLOR_HIGHLIGHT=' /etc/default/grub || echo 'GRUB_COLOR_HIGHLIGHT="red/black"' >> /etc/default/grub
    sed -i 's/^GRUB_COLOR_HIGHLIGHT=.*/GRUB_COLOR_HIGHLIGHT="red\/black"/' /etc/default/grub
fi
if [ -f /etc/grub.d/10_linux ]; then
    sed -i 's/Ubuntu|Kubuntu|\*GNU\/Linux)/Ubuntu|Kubuntu|*GNU\/Linux|*GNU\/Linux-libre*)/' /etc/grub.d/10_linux
fi
# O 05_debian_theme sobrescreve as cores com o tema azul do Debian
# (menu_color_highlight=white/blue), ignorando o GRUB_COLOR_HIGHLIGHT.
# Forcamos vermelho no item selecionado, editando o set_default_theme.
# Usamos perl (mais confiavel que sed para padroes com ${1}).
if [ -f /etc/grub.d/05_debian_theme ]; then
    perl -i -pe 's/menu_color_normal=cyan\/blue/menu_color_normal=white\/black/' /etc/grub.d/05_debian_theme
    perl -i -pe 's/menu_color_highlight=white\/blue/menu_color_highlight=red\/black/' /etc/grub.d/05_debian_theme
fi

# Garantia EXTRA: script 09_gnucego_colors que roda DEPOIS do 05_debian_theme
# e força as cores vermelhas (texto escuro selecionado em vermelho) no final.
cat > /etc/grub.d/09_gnucego_colors <<'EOF'
#!/bin/sh
# GNUcego: cores vermelhas (rodam por ultimo, apos o 05_debian_theme).
cat <<GRUBEOF
set color_normal=white/black
set color_highlight=red/black
menu_color_normal=white/black
menu_color_highlight=red/black
GRUBEOF
EOF
chmod 755 /etc/grub.d/09_gnucego_colors 2>/dev/null || true
# Garante que o tema do GRUB use as cores do /etc/default/grub (nao o
# tema amarelo do desktop-base/gfxboot).
if grep -q '^GRUB_THEME' /etc/default/grub 2>/dev/null; then
    sed -i 's/^GRUB_THEME=.*/GRUB_THEME=""/' /etc/default/grub
fi

# ---------------------------------------------------------------
# 6) LOCALE pt_BR.UTF-8 (corrige acentuação no terminal)
# ---------------------------------------------------------------
if [ -x /usr/sbin/locale-gen ]; then
    sed -i 's/^# *pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen
    locale-gen pt_BR.UTF-8 || true
    update-locale LANG=pt_BR.UTF-8 LC_ALL=pt_BR.UTF-8 || true
    echo "LANG=pt_BR.UTF-8" > /etc/default/locale
fi

# ---------------------------------------------------------------
# 7) FASTFETCH: ja instalado durante o pkgsel. Aqui so baixamos
#    o logo + configuracao.
# ---------------------------------------------------------------
if command -v fastfetch >/dev/null 2>&1; then
    # logo GNUcego: baixa o morcego (gerado a partir da imagem) do repo.
    mkdir -p /etc/fastfetch
    if ! wget -q -O /etc/fastfetch/gnucego-logo.txt "$BASE/gnucego/gnucego-logo-fastfetch.txt"; then
        # fallback: logo simples embutido (caso o download falhe)
        cat > /etc/fastfetch/gnucego-logo.txt <<'EOF'
$1    GNUcego
$1 GNU/Linux-libre
EOF
    fi
    cat > /etc/fastfetch/config.jsonc <<'EOF'
{
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
  "logo": {
    "type": "file",
    "source": "/etc/fastfetch/gnucego-logo.txt",
    "color": {
      "1": "red",
      "2": "black"
    }
  },
  "display": {
    "separator": " : "
  },
  "modules": [
    "title",
    "separator",
    "os",
    "kernel",
    "uptime",
    "packages",
    "shell",
    "display",
    "de",
    "wm",
    "terminal",
    "cpu",
    "gpu",
    "memory",
    "separator",
    "colors"
  ]
}
EOF
    # copiar também para o usuário criado durante a instalação (se houver)
    if [ -d /home ]; then
        for h in /home/*; do
            [ -d "$h" ] || continue
            u=$(basename "$h")
            mkdir -p "$h/.config/fastfetch"
            cp /etc/fastfetch/config.jsonc "$h/.config/fastfetch/config.jsonc" || true
            cp /etc/fastfetch/gnucego-logo.txt "$h/.config/fastfetch/logo.txt" 2>/dev/null || true
            chown -R "$(id -u "$u" 2>/dev/null || echo 0):$(id -g "$u" 2>/dev/null || echo 0)" "$h/.config" 2>/dev/null || true
        done
    fi
    echo "fastfetch configurado"
fi

# ---------------------------------------------------------------
# 8) WALLPAPER GNUcego (GRUB + GDM + LightDM + SDDM + backgrounds)
# ---------------------------------------------------------------
WALL_TARGET=/usr/share/backgrounds/gnucego
mkdir -p "$WALL_TARGET"
if [ ! -s "$WALL_TARGET/wallpaper.jpg" ]; then
    wget -q -O "$WALL_TARGET/wallpaper.jpg" "$BASE/gnucego/wallpaper.jpg" || true
fi
if [ -s "$WALL_TARGET/wallpaper.jpg" ]; then
    # GRUB: fundo do menu (usa PNG 1024x768 pré-gerado no repo; ideal para o grub)
    if [ -f /etc/default/grub ]; then
        mkdir -p /boot/grub
        if ! wget -q -O /boot/grub/gnucego-background.png "$BASE/gnucego/grub-background.png"; then
            # fallback: usar o jpg direto (o grub aceita jpeg)
            cp "$WALL_TARGET/wallpaper.jpg" /boot/grub/gnucego-background.png || true
        fi
        if [ -s /boot/grub/gnucego-background.png ]; then
            grep -q '^GRUB_BACKGROUND=' /etc/default/grub || echo 'GRUB_BACKGROUND="/boot/grub/gnucego-background.png"' >> /etc/default/grub
            sed -i 's|^#\?GRUB_BACKGROUND=.*|GRUB_BACKGROUND="/boot/grub/gnucego-background.png"|' /etc/default/grub
        fi
    fi

    # GDM (GNOME) — fundo da tela de login
    if [ -d /etc/gdm3 ]; then
        mkdir -p /etc/dconf/db/gdm.d
        cat > /etc/dconf/db/gdm.d/01-gnucego-background <<EOF
[org/gnome/desktop/background]
picture-uri='file://$WALL_TARGET/wallpaper.jpg'
picture-options='zoom'

[org/gnome/desktop/screensaver]
picture-uri='file://$WALL_TARGET/wallpaper.jpg'
picture-options='zoom'
EOF
        dconf update 2>/dev/null || true
    fi

    # LightDM (MATE/Cinnamon/Xfce) — fundo do greeter
    if command -v lightdm >/dev/null 2>&1 || [ -d /etc/lightdm ]; then
        mkdir -p /etc/lightdm
        if [ -f /etc/lightdm/lightdm-gtk-greeter.conf ]; then
            sed -i "s|^#\?background=.*|background=$WALL_TARGET/wallpaper.jpg|" /etc/lightdm/lightdm-gtk-greeter.conf || echo "background=$WALL_TARGET/wallpaper.jpg" >> /etc/lightdm/lightdm-gtk-greeter.conf
        else
            cat > /etc/lightdm/lightdm-gtk-greeter.conf <<EOF
[greeter]
background=$WALL_TARGET/wallpaper.jpg
theme-name=Adwaita
EOF
        fi
    fi

    # SDDM (KDE/LXQt) — fundo do login
    if [ -d /etc/sddm.conf.d ]; then
        cat > /etc/sddm.conf.d/gnucego.conf <<EOF
[Theme]
Current=breeze
EOF
    fi

    # Slick-greeter (LightDM MATE/Cinnamon) via dconf
    if [ -d /etc/dconf ]; then
        mkdir -p /etc/dconf/db/lightdm.d
        cat > /etc/dconf/db/lightdm.d/01-gnucego-background <<EOF
[com/linuxmint/slick-greeter]
background='file://$WALL_TARGET/wallpaper.jpg'
EOF
        dconf update 2>/dev/null || true
    fi

    # -----------------------------------------------------------
    # WALLPAPER PADRAO DO DESKTOP (todas as DEs, apos o login)
    # -----------------------------------------------------------
    # Copia para o diretorio padrao de backgrounds (fallback para qualquer DE)
    mkdir -p /usr/share/backgrounds
    cp "$WALL_TARGET/wallpaper.jpg" /usr/share/backgrounds/gnucego-wallpaper.jpg 2>/dev/null || true

    # GNOME / Cinnamon / MATE (usam dconf/gsettings: org.gnome.desktop.background)
    if command -v gsettings >/dev/null 2>&1 || [ -f /usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml ]; then
        mkdir -p /etc/dconf/db/local.d /etc/dconf/profile
        # aplica para qualquer usuario que logar (db 'local.d' e o profile 'user')
        cat > /etc/dconf/db/local.d/00-gnucego-wallpaper <<EOF
[org/gnome/desktop/background]
picture-uri='file:///usr/share/backgrounds/gnucego-wallpaper.jpg'
picture-uri-dark='file:///usr/share/backgrounds/gnucego-wallpaper.jpg'
picture-options='zoom'
[org/cinnamon/desktop/background]
picture-uri='file:///usr/share/backgrounds/gnucego-wallpaper.jpg'
picture-options='zoom'
EOF
        cat > /etc/dconf/profile/gdm <<'EOF'
user-db:user
system-db:local
EOF
        [ -f /etc/dconf/profile/user ] || cat > /etc/dconf/profile/user <<'EOF'
user-db:user
system-db:local
EOF
        dconf update 2>/dev/null || true
    fi

    # MATE (org.mate.background + org.mate.interface: wallpaper, tema e icone)
    if command -v gsettings >/dev/null 2>&1 || [ -f /usr/share/glib-2.0/schemas/org.mate.background.gschema.xml ]; then
        mkdir -p /etc/dconf/db/local.d
        # complementa o arquivo acima com MATE (nao sobrescrever)
        cat >> /etc/dconf/db/local.d/00-gnucego-wallpaper <<EOF
[org/mate/background]
picture-filename='/usr/share/backgrounds/gnucego-wallpaper.jpg'
picture-options='zoom'
[org/mate/interface]
gtk-theme='TraditionalOk'
icon-theme='gnome'
EOF
        # profile para garantir que o dconf 'local' seja aplicado ao user
        [ -f /etc/dconf/profile/user ] || cat > /etc/dconf/profile/user <<'EOF'
user-db:user
system-db:local
EOF
        dconf update 2>/dev/null || true
    fi

    # Xfce (usa xfconf: xfce4-desktop /backdrop)
    if command -v xfconf-query >/dev/null 2>&1 || [ -d /etc/xdg/xfce4 ]; then
        mkdir -p /etc/xdg/xfce4/xfconf/xfce-perchannel-xml
        cat > /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-desktop" version="1.0">
  <property name="backdrop" type="empty">
    <property name="screen0" type="empty">
      <property name="monitor0" type="empty">
        <property name="image-path" type="string" value="/usr/share/backgrounds/gnucego-wallpaper.jpg"/>
        <property name="image-style" type="int" value="5"/>
        <property name="last-image" type="string" value="/usr/share/backgrounds/gnucego-wallpaper.jpg"/>
      </property>
    </property>
  </property>
</channel>
EOF
    fi
fi

# ---------------------------------------------------------------
# 9) i3wm: wallpaper do morcego + terminator como terminal padrao + .xinitrc
# ---------------------------------------------------------------
if command -v i3 >/dev/null 2>&1; then
    WALL="$WALL_TARGET/wallpaper.jpg"
    # config global do i3 (usada se o usuario nao tiver a propria)
    mkdir -p /etc/i3
    cat > /etc/i3/config <<EOF
# GNUcego i3 config
set \$mod Mod4
font pango:monospace 10

# terminal padrao: terminator
set \$terminal terminator

# wallpaper do morcego (via feh)
exec_always --no-startup-id feh --bg-scale "$WALL"

# iniciar barra de status
bar {
    status_command i3status
}

# atalhos basicos
bindsym \$mod+Return exec \$terminal
bindsym \$mod+d exec dmenu_run
bindsym \$mod+Shift+q kill
bindsym \$mod+Shift+r restart
bindsym \$mod+Shift+e exit
EOF

    # .xinitrc para iniciar o i3 via startx (e copiar para os usuarios)
    mkdir -p /etc/skel
    cat > /etc/skel/.xinitrc <<'EOF'
#!/bin/sh
# inicia o i3 ao usar startx
exec i3
EOF

    # config + .xinitrc para os usuarios existentes
    if [ -d /home ]; then
        for h in /home/*; do
            [ -d "$h" ] || continue
            u=$(basename "$h")
            mkdir -p "$h/.config/i3" "$h/.config/i3status"
            [ -f "$h/.config/i3/config" ] || cp /etc/i3/config "$h/.config/i3/config"
            [ -f "$h/.xinitrc" ] || cp /etc/skel/.xinitrc "$h/.xinitrc"
            chown -R "$(id -u "$u" 2>/dev/null || echo 0):$(id -g "$u" 2>/dev/null || echo 0)" "$h/.config/i3" "$h/.xinitrc" 2>/dev/null || true
        done
    fi
    echo "i3 configurado"
fi

# ---------------------------------------------------------------
# 10) final: regenerar initramfs + grub + limpar
# ---------------------------------------------------------------
# Só o kernel gnu (não -k all, que tentaria kernels inexistentes e demoraria).
update-initramfs -u -k 7.3.1-gnu || update-initramfs -u || true
update-grub || true
apt-get clean || true

echo "=== GNUcego pós-instalação concluída ==="
