#!/usr/bin/env bash
set -euo pipefail

echo "=== INXS ZSH Installer V2 — Bulletproof ==="

USER_HOME="$HOME"
ZSH_BIN="/usr/bin/zsh"
ZSH_DIR="$USER_HOME/.oh-my-zsh"
ZSH_CUSTOM="$ZSH_DIR/custom"

###############################################################################
# 1) Install Zsh if missing
###############################################################################
if ! command -v zsh >/dev/null 2>&1; then
    echo "[+] Installing Zsh..."
    sudo apt update -y
    sudo apt install -y zsh
fi

###############################################################################
# 2) Remove conflicting Debian fzf BEFORE anything else
###############################################################################
if command -v fzf >/dev/null 2>&1 && [[ "$(command -v fzf)" == "/usr/bin/fzf" ]]; then
    echo "[+] Removing Debian fzf (outdated, breaks fzf-tab)..."
    sudo apt remove --purge -y fzf || true
fi

###############################################################################
# 3) Remove any outdated/incomplete GitHub fzf install
###############################################################################
rm -rf "$USER_HOME/.fzf" 2>/dev/null || true

###############################################################################
# 4) Install GitHub fzf (clean)
###############################################################################
echo "[+] Installing fzf (GitHub version)"
git clone --depth 1 https://github.com/junegunn/fzf "$USER_HOME/.fzf"
yes | "$USER_HOME/.fzf/install" --no-bash --no-fish --key-bindings --completion

###############################################################################
# 5) Install Oh-My-Zsh (safe, without overwriting .zshrc)
###############################################################################
if [[ ! -d "$ZSH_DIR" ]]; then
    echo "[+] Installing Oh-My-Zsh..."
    RUNZSH=no CHSH=no KEEP_ZSHRC=yes sh -c \
        "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
fi

###############################################################################
# 6) Ensure $ZSH_CUSTOM exists
###############################################################################
mkdir -p "$ZSH_CUSTOM/plugins"
mkdir -p "$ZSH_CUSTOM/themes"

###############################################################################
# 7) Remove broken OMZ fzf plugin forever
###############################################################################
rm -rf "$ZSH_DIR/plugins/fzf" 2>/dev/null || true

###############################################################################
# 8) Install Zsh Plugins
###############################################################################
clone_plugin() {
  local repo="$1"
  local dir="$2"
  if [[ ! -d "$dir" ]]; then
    echo "[+] Installing plugin: $repo"
    git clone --depth=1 "$repo" "$dir"
  fi
}

clone_plugin https://github.com/zsh-users/zsh-autosuggestions \
    "$ZSH_CUSTOM/plugins/zsh-autosuggestions"

clone_plugin https://github.com/zsh-users/zsh-syntax-highlighting \
    "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting"

clone_plugin https://github.com/zsh-users/zsh-history-substring-search \
    "$ZSH_CUSTOM/plugins/zsh-history-substring-search"

clone_plugin https://github.com/Aloxaf/fzf-tab \
    "$ZSH_CUSTOM/plugins/fzf-tab"

clone_plugin https://github.com/romkatv/powerlevel10k.git \
    "$ZSH_CUSTOM/themes/powerlevel10k"

###############################################################################
# 9) Create ~/.shell_common
###############################################################################
cat > "$USER_HOME/.shell_common" <<'EOF'
# INXS unified config for Bash + Zsh

# Load INXS aliases
if [ -f "$HOME/ket-bash_aliases/.bash_aliases" ]; then
    source "$HOME/ket-bash_aliases/.bash_aliases"
fi

# FZF configuration
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

if command -v bat >/dev/null 2>&1; then
    export FZF_PREVIEW_COMMAND='bat --style=numbers --color=always --line-range=:500 {}'
elif command -v batcat >/dev/null 2>&1; then
    export FZF_PREVIEW_COMMAND='batcat --style=numbers --color=always --line-range=:500 {}'
fi
EOF

###############################################################################
# 10) Create ~/.bashrc (auto-switch to Zsh)
###############################################################################
cat > "$USER_HOME/.bashrc" <<'EOF'
[ -f ~/.shell_common ] && source ~/.shell_common
[ -f ~/.fzf.bash ] && source ~/.fzf.bash

# Auto-switch to Zsh in interactive terminals
if [ -z "$ZSH_VERSION" ] && [ -t 1 ]; then
    exec zsh -l
fi
EOF

###############################################################################
# 11) Create ~/.zshrc (final, safe, clean)
###############################################################################
cat > "$USER_HOME/.zshrc" <<'EOF'
export ZSH="$HOME/.oh-my-zsh"

plugins=(
  git
  fzf-tab
  zsh-autosuggestions
  zsh-syntax-highlighting
  zsh-history-substring-search
)

source $ZSH/oh-my-zsh.sh

[ -f ~/.shell_common ] && source ~/.shell_common

bindkey '^R' history-incremental-search-backward
bindkey '^T' fzf-file-widget
bindkey '^[c' fzf-cd-widget

source ~/.p10k.zsh
EOF

###############################################################################
# 12) Install INXS Powerlevel10k Theme
###############################################################################
cat > "$USER_HOME/.p10k.zsh" <<'EOF'
# ===========================
# Powerlevel10k - INXS BLUE THEME
# ===========================

INXS_DARK="#1C1F24"
INXS_BLUE="#0050A4"
INXS_BRIGHT_BLUE="#008CFF"
INXS_CYAN="#33CFFF"
INXS_GREY="#A6B0BF"
INXS_WHITE="#FFFFFF"

typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=""
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=""
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=" "
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR=""

POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=""
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{$INXS_BLUE}❯%f "
POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX="%F{$INXS_BLUE}▌%f "

POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=""
POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=""

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
  os_icon
  dir
  vcs
)

POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
  status
  command_execution_time
  time
)

typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=$INXS_BLUE
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=$INXS_WHITE

typeset -g POWERLEVEL9K_DIR_BACKGROUND=$INXS_BRIGHT_BLUE
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$INXS_WHITE
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=$INXS_CYAN
typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=40

typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=$INXS_BLUE
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=$INXS_WHITE
typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=$INXS_BLUE
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=$INXS_WHITE
typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=$INXS_BLUE
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=$INXS_WHITE
POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true

typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=$INXS_BLUE
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=$INXS_WHITE
typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND="#CC0000"
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=$INXS_WHITE
POWERLEVEL9K_STATUS_CROSS=true

typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=$INXS_DARK
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$INXS_GREY
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=2
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=2

typeset -g POWERLEVEL9K_TIME_BACKGROUND=$INXS_DARK
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$INXS_GREY
typeset -g POWERLEVEL9K_TIME_FORMAT='%H:%M'
EOF

###############################################################################
echo "=== INXS ZSH Installed successfully ==="
echo "Restart terminal or run: exec zsh"
echo "To reset back to bash, run: bash ~/ket-scripts/setup/zsh_reset.sh"