# ----------------------------------------------------------
# Zsh-Konfiguration für René
# Oh My Zsh + Powerlevel10k + Micro + Conda
# ----------------------------------------------------------

# 1) Powerlevel10k Instant Prompt (muss sehr weit oben stehen)
# quiet: cowsay-Begruessung erzeugt Console-Output, Warnung unterdruecken
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# 1b) Secrets laden (API-Keys etc. — liegt lokal, NICHT im Repo)
[[ -f "$HOME/.secrets" ]] && source "$HOME/.secrets"

# 2) Oh My Zsh Basis
export ZSH="$HOME/.oh-my-zsh"

# Theme: Powerlevel10k
ZSH_THEME="powerlevel10k/powerlevel10k"

# Plugins
# - git: Git-Shortcuts
# - zsh-syntax-highlighting: farbige Befehle in der Shell
plugins=(
  git
  zsh-syntax-highlighting
  zoxide
)

# Oh My Zsh laden
source "$ZSH/oh-my-zsh.sh"

# 3) Powerlevel10k-Konfiguration laden (falls vorhanden)
[[ -f "$HOME/.p10k.zsh" ]] && source "$HOME/.p10k.zsh"

# 4) Sprache/Lokalisierung (optional, bei Bedarf anpassen)
# export LANG=de_DE.UTF-8
# export LC_ALL=de_DE.UTF-8

# 5) Standard-Editor (Mac lokal: micro, SSH-Session: nichts erzwingen)
if [[ -z "$SSH_CONNECTION" ]]; then
  export EDITOR="micro"
  export VISUAL="micro"
fi

# 6) Pfade erweitern

# LM Studio CLI (bereits vorhanden, übernommen)
export PATH="$PATH:$HOME/.lmstudio/bin"

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

# 7) Nützliche Aliases

# ls-Varianten
alias ll='ls -lha'
alias la='ls -A'
alias l='ls -lh'

# Verzeichnisse
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# Schneller in Konfigdateien
alias zshconfig='micro ~/.zshrc'
alias p10kconfig='micro ~/.p10k.zsh'

# Git-Kurzbefehle
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph --decorate'
alias gitcheck="~/git-check-all.sh --short"
alias gitupdate="~/git-update-all.sh"
alias cb="pbpaste | sed 's/^  //' | pbcopy"
# Ubuntu-Kompatibilitaet: fd und bat heissen dort anders
command -v fdfind &>/dev/null && ! command -v fd &>/dev/null && alias fd='fdfind'
command -v batcat &>/dev/null && ! command -v bat &>/dev/null && alias bat='batcat'

# Offline-KI Shortcuts
alias ki-chat='ki interactive'
alias ki-agent='ki interactive --agent-mode'
alias ki-rchat='ki --remote interactive'
alias ki-ragent='ki --remote interactive --agent-mode'
alias ki-commit='ki commit'
alias ki-fix='ki fix'
alias ki-roast='ki roast'
alias ki-docker='ki docker'
alias ki-dns='ki dns'
alias ki-diff='ki diff'
alias ki-wetter='ki wetter'
alias ki-tl='ki tl'

alias fetch="fastfetch"
alias temps="sudo powermetrics -s cpu_power,gpu_power,thermal,battery -i 1000 -n 1"

# Cheat-Sheet: alle Tools, Aliases und Skripte auf einen Blick
tools() {
  cat <<'TOOLS'

  ╔══════════════════════════════════════════════════════════════╗
  ║                    Terminal Cheat-Sheet                     ║
  ╚══════════════════════════════════════════════════════════════╝

  GIT
  ────────────────────────────────────────────────────────────────
  gs              git status
  ga              git add
  gc              git commit
  gp              git push
  gl              git log (oneline, graph)
  gd              git diff
  gco             git checkout
  gb              git branch
  gitcheck        Status aller Git-Repos pruefen
  gitupdate       alle Git-Repos pullen
  gitsync         alle Repos sync (push+pull)
  mac-sync        git-sync remote ausfuehren

  PLATFORMIO
  ────────────────────────────────────────────────────────────────
  pio run           kompilieren
  pio run -t upload flashen
  pio device monitor seriellen Monitor oeffnen
  pio run -t clean  Build-Artefakte loeschen
  pio lib install   Bibliothek installieren
  pio init --board <board>   neues Projekt erstellen

  NAVIGATION & DATEIEN
  ────────────────────────────────────────────────────────────────
  z <pfad>        zoxide: smart cd (lernt haeufige Pfade)
  ll / la / l     ls-Varianten (-lha / -A / -lh)
  .. / ... / .... schnell hoch navigieren
  eza             modernes ls (Farben, Icons, Git-Status)
    eza -la         alle Dateien mit Details
    eza -T          Baumansicht
  bat <datei>     cat mit Syntax-Highlighting
  fd <muster>     schnelles find (z.B. fd '\.txt$')
  rg <text>       blitzschnelles grep (z.B. rg 'TODO' src/)
  fzf             Fuzzy-Finder (Ctrl+T Dateien, Ctrl+R History)
  ncdu            interaktive Festplattennutzung
  duf             schoene Uebersicht freier Speicherplatz
  yazi            Terminal-Dateimanager (q = quit)
  micro <datei>   einfacher Editor (Ctrl+S, Ctrl+Q)

  BILDER (~/bin)
  ────────────────────────────────────────────────────────────────
  h2j / heic2jpg  HEIC → JPG konvertieren
    heic2jpg_resize           + verkleinern
    heic2jpg_delete           + HEIC loeschen
    heic2jpg_resize_delete    + beides
    jpg_resize                nur JPG verkleinern

  SSH-SHORTCUTS
  ────────────────────────────────────────────────────────────────
  ssh ds          DiskStation (ds918admin@10.47.11.10)
  ssh ds "cmd"    Befehl remote ausfuehren
  scp f ds:~/     Datei auf DS kopieren

  SYSTEM & KONFIG
  ────────────────────────────────────────────────────────────────
  fetch           fastfetch (Systeminfo)
  temps           CPU/GPU-Temperatur + Akku (Mac)
  cb              Clipboard bereinigen (2 Leerzeichen weg)
  zshconfig       ~/.zshrc bearbeiten
  p10kconfig      ~/.p10k.zsh bearbeiten
  tldr <befehl>   Kurzanleitung mit Beispielen

  CLAUDE CODE
  ────────────────────────────────────────────────────────────────
  claude-priv       Claude Code mit Privat-Account (mail@motocamp.de)
  claude-work       Claude Code mit Work-Account (rene@rm202.de)
  claude-account priv|work  Re-Login: abmelden, Browser, neu anmelden

  MACBOOK-SETUP (curl | bash)
  ────────────────────────────────────────────────────────────────
  setup-base.sh <13|16>     Basis-Setup (als root)
  setup-desktop.sh          Desktop + Apps (als user)

  OFFLINE-KI (LM Studio)
  ────────────────────────────────────────────────────────────────
  ki-chat         interaktiver Chat (Streaming)
  ki-agent        Agent-Modus (Dateizugriff, Shell)
  ki-rchat        Chat ueber ki.motocamp.de (VPN)
  ki-ragent       Agent ueber ki.motocamp.de (VPN)
  ki-commit       Commit-Message generieren + committen
  ki-fix          letzten fehlgeschlagenen Befehl fixen
  ki-roast <f>    humorvolles Code-Review
  ki-docker       DS Container-Status (logs, check)
  ki-dns          DNS-Check motocamp.de Subdomains
  ki-diff         Git-Diff mit KI-Zusammenfassung
  ki-wetter       Wetter + KI-Kommentar
  ki-tl           Too Long: Dateien/Text zusammenfassen
  ki explain !    letzten Shell-Befehl erklaeren
  ki cow "..."    Chat mit Cowsay-Ausgabe
  ki foreach "*.py" "Finde Bugs"   Prompt pro Datei
  ki watch log "Erklaere Fehler"   Datei ueberwachen
  ki pipe         stdin -> KI -> stdout
  ki status       Dashboard
  ki models       verfuegbare Modelle
  ki skills       Skills auflisten
  ki skill <name> -f <datei>   Skill ausfuehren

  NEUE TOOLS
  ────────────────────────────────────────────────────────────────
  lg              lazygit: Git-TUI (space=stage, c=commit, p=push, ?=Hilfe)
                    - einzelne Zeilen selektiv stagen
                    - interaktiver Rebase ohne scary Kommandos
  git diff/log    automatisch via delta (side-by-side, n/N=naechster Block)
  Ctrl+R          atuin: fuzzy History-Suche mit Zeitstempel + Exit-Code
  mise use        Tool-Versionen pro Projekt (mise use python@3.12)
  Stats           Menüleisten-Monitor (CPU/RAM/Netz/Akku)

  SPASS
  ────────────────────────────────────────────────────────────────
  cmatrix         Matrix-Regen (q = quit)
  asciiquarium    Aquarium im Terminal (q = quit)
  fortune | cowsay   zufaelliger Spruch mit Kuh

TOOLS
}

# Terminal-Screensaver: zufaellig cmatrix oder asciiquarium nach 5 Min Idle
TMOUT=300
TRAPALRM() {
  local screensavers=()
  command -v cmatrix &>/dev/null && screensavers+=("cmatrix -sab")
  command -v asciiquarium &>/dev/null && screensavers+=("asciiquarium")
  (( ${#screensavers[@]} )) && eval "${screensavers[$((RANDOM % ${#screensavers[@]} + 1))]}"
}

# Begruessung: zufaellig Systemstatus, Spruch oder Witz
if [[ -o interactive ]] && command -v cowsay &>/dev/null; then
  _greet() {
    local all_cows=(default tux sheep elephant dragon gnu koala)
    local cow_files=()
    local cowpath
    cowpath=$(cowsay -l 2>/dev/null | tail -n +2 | tr ' ' '\n')
    for c in "${all_cows[@]}"; do
      echo "$cowpath" | grep -qx "$c" && cow_files+=("$c")
    done
    (( ${#cow_files[@]} == 0 )) && cow_files=(default)
    local cow="${cow_files[$((RANDOM % ${#cow_files[@]} + 1))]}"
    case $((RANDOM % 3)) in
      0) # Systemstatus
        local host load
        host=$(hostname -s)
        load=$(uptime | sed 's/.*average[s]*: *\([^ ]*\).*/\1/')
        echo "$host | load $load" | cowsay -f "$cow"
        ;;
      1) # Datum-Spruch
        local day=$(date +%u) msg
        case $day in
          1) msg="Montag... Kaffee ist Pflicht!" ;;
          2) msg="Dienstag - immerhin kein Montag mehr." ;;
          3) msg="Mittwoch - Bergfest!" ;;
          4) msg="Donnerstag - morgen ist fast Wochenende!" ;;
          5) msg="Freitag! Die Woche gehoert dir." ;;
          6) msg="Samstag - Zeit fuer Projekte!" ;;
          7) msg="Sonntag - entspann dich mal." ;;
        esac
        echo "$msg ($(date '+%d.%m.%Y, %H:%M'))" | cowsay -f "$cow"
        ;;
      2) # Witz/Spruch via fortune
        if command -v fortune &>/dev/null; then
          fortune -s 2>/dev/null | cowsay -f "$cow"
        else
          echo "Keine Witze installiert. Sad." | cowsay -f "$cow"
        fi
        ;;
    esac
  }
  _greet
  unfunction _greet
fi

alias gitsync="~/git-projekte/dotfiles-rene/bin/git-sync-all.sh"
alias mac-sync="curl -fsSL https://git.motocamp.de/rene/dotfiles-rene/raw/branch/main/bin/git-sync-all.sh | bash"

# 8) Conda-Initialisierung
# ----------------------------------------------------------
# Dieser Block wurde ursprünglich von `conda init` erzeugt.
# Wenn Conda-Updates irgendwann meckern, einfach erneut:
#   conda init zsh
# laufen lassen.
# ----------------------------------------------------------
__conda_setup="$('/Users/rene/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/rene/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/rene/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/rene/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

# 9) Kleine Qualität-of-Life-Einstellungen für Zsh

# Bessere History
HISTFILE="$HOME/.zsh_history"
HISTSIZE=5000
SAVEHIST=5000

setopt HIST_IGNORE_DUPS     # keine direkt aufeinanderfolgenden Duplikate
setopt HIST_IGNORE_SPACE    # Befehle, die mit Leerzeichen beginnen, nicht speichern
setopt SHARE_HISTORY        # History zwischen mehreren Zsh-Sessions teilen

# Automatisches cd wenn nur ein Verzeichnisname eingegeben wird
setopt AUTO_CD

# Autokorrektur bei Tippfehlern (optional, wenn es nervt, auskommentieren)
# setopt CORRECT

# 10) Prompt-Titel schön halten (Fenster-/Tab-Titel)
# Zeigt user@host:pfad an
precmd() { print -Pn "\e]0;%n@%m: %~\a" }
export COLORTERM=truecolor

test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"

# 11) Tool-Integrationen
eval "$(atuin init zsh)"
eval "$(mise activate zsh)"

# delta als Git-Pager
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global delta.side-by-side true

# lazygit Alias
alias lg='lazygit'

# claude-profiles-start
alias claude-priv='CLAUDE_CONFIG_DIR=~/.claude-priv command claude'  # mail@motocamp.de
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work command claude'  # rene@rm202.de
alias claude='echo "Bitte claude-priv oder claude-work verwenden."'
claude-account() {
  local profile="$1"
  if [[ "$profile" != "priv" && "$profile" != "work" ]]; then
    echo "Verwendung: claude-account priv|work"
    return 1
  fi
  local config_dir="$HOME/.claude-${profile}"
  echo "==> Claude Code abmelden (${profile})..."
  CLAUDE_CONFIG_DIR="$config_dir" command claude /logout
  echo ""
  echo "==> Browser oeffnen - bitte ab- und neu anmelden..."
  open "https://console.anthropic.com"
  read -r "?Wenn im Browser fertig, Enter druecken..."
  echo ""
  echo "==> Claude Code anmelden (${profile})..."
  CLAUDE_CONFIG_DIR="$config_dir" command claude /login
}
# claude-profiles-end

nvim-cheats() {
    echo -e "\e[1;36m=== NVIM CHEAT SHEET ===\e[0m\n"

    # Navigation
    echo -e "\e[1mNAVIGATION & POSITIONIERUNG\e[0m"
    echo "-------------------------------------------"
    echo "h/j/k/l   : Links/Unten/Oben/Rechts bewegen"
    echo "w/b       : Zum nächsten/vorherigen Wort springen"
    echo "gg/G      : Anfang / Ende der Datei"
    echo ":Nr       : Zur Zeilenummer Nr springen (z.B. :42)\n"

    # LÖSCHEN (Neu hinzugefügt)
    echo -e "\e[1;33mLÖSCHEN & BEARBEITEN\e[0m"  # Gelb für Hervorhebung
    echo "-------------------------------------------"
    echo "dd        : Ganze Zeile löschen"
    echo "dw        : Wort löschen"
    echo "D / d$    : Alles nach Cursor bis Zeilenende löschen"
    echo "d0        : Alles vor Cursor bis Zeilenbeginn löschen"
    echo "x         : Zeichen unter dem Cursor löschen"
    echo "X         : Zeichen vor dem Cursor löschen\n"

    # EDITING & UNDO
    echo -e "\e[1mEDITING & RÜCKGÄNGIG\e[0m"
    echo "-------------------------------------------"
    echo "i/a       : Einfügemodus (vor/nach Cursor)"
    echo "o/O       : Neue Zeile öffnen (unter/über)"
    echo "Esc       : In den Normalmodus zurückkehren"
    echo "u         : Rückgängig machen (Undo)"
    echo "Ctrl-r    : Wiederherstellen (Redo)\n"

    # VISUELL & COPY/PASTE
    echo -e "\e[1mVISUELL WÄHLEN & KOPIEREN\e[0m"
    echo "-------------------------------------------"
    echo "v         : Visueller Modus starten"
    echo "yy/yw     : Kopieren (Yank) Zeile/Wort"
    echo "p/P       : Einfügen (Paste) nach/vor Cursor\n"

    # CHANGE (Löschen + Einfügemodus)
    echo -e "\e[1mCHANGE (Löschen & direkt tippen)\e[0m"
    echo "-------------------------------------------"
    echo "cw        : Wort ab Cursor ersetzen"
    echo "cc / S    : Ganze Zeile ersetzen"
    echo "ci\"       : Inhalt in Anführungszeichen ersetzen"
    echo "ci(       : Inhalt in Klammern ersetzen"
    echo "C / c\$    : Alles nach Cursor bis Zeilenende ersetzen\n"

    # SUCHE & ERSETZEN
    echo -e "\e[1mSUCHE & ERSETZEN\e[0m"
    echo "-------------------------------------------"
    echo "/suche    : Suche vorwärts"
    echo "?suche    : Suche rückwärts"
    echo "n/N       : Nächsten/vorherigen Treffer anspringen"
    echo "*         : Wort unter Cursor suchen"
    echo ":%s/alt/neu/g : Ersetzen (global in Datei)\n"

    # DATEI & FENSTER
    echo -e "\e[1mDATEI & FENSTER\e[0m"
    echo "-------------------------------------------"
    echo ":wq / :x  : Speichern und schließen"
    echo ":q!       : Änderungen verwerfen & schließen"
    echo ":sp file  : Split horizontal (neues Fenster unten)"
    echo ":vs file  : Split vertikal (neues Fenster rechts)\n"
}
