#!/bin/sh
set -e

ZSHRC_TARGET="$HOME/.zshrc"
BACKUP="${ZSHRC_TARGET}.bak.$(date +%s)"

if [ -f "$ZSHRC_TARGET" ]; then
    cp "$ZSHRC_TARGET" "$BACKUP"
    echo "Old .zshrc saved as $BACKUP"
fi

cat > "$ZSHRC_TARGET" << 'EOF'
export PATH="$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH"

setopt AUTO_CD
setopt CORRECT
setopt EXTENDED_HISTORY
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS

HISTSIZE=10000
SAVEHIST=10000
HISTFILE="$HOME/.zsh_history"

autoload -Uz compinit && compinit -u
zstyle ':completion:*' menu select
zstyle ':completion:*' list-colors "${(@s.:.)LS_COLORS}"

if command -v zsh-syntax-highlighting >/dev/null 2>&1; then
    source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null \
    || source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null \
    || source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
fi

if command -v zsh-autosuggestions >/dev/null 2>&1; then
    source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null \
    || source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null
fi

DISABLE_MAGIC_FUNCTIONS="true"

alias cls='clear'
alias la='ls -la'
alias ll='ls -l'
alias g='git'
alias ..='cd ..'
alias ...='cd ../..'

if command -v lsd >/dev/null 2>&1; then
    alias ls='lsd'
    alias tree='lsd --tree'
else
    alias ls='ls --color=auto'
fi

if command -v bat >/dev/null 2>&1; then
    alias cat='bat'
else
    alias cat='cat'
fi

if command -v micro >/dev/null 2>&1; then
    alias nano='micro'
    export EDITOR='micro'
    export VISUAL='micro'
elif command -v nvim >/dev/null 2>&1; then
    export EDITOR='nvim'
    alias nano='nvim'
else
    export EDITOR='vim'
fi

mkcd() {
    mkdir -p "$1" && cd "$1"
}

autoload -Uz colors && colors
set_prompt() {
    local user_color="%F{green}"
    local host_color="%F{yellow}"
    local path_color="%F{blue}"
    local normal="%f"

    PROMPT="${user_color}%n${normal}@${host_color}%m${normal} ${path_color}%~${normal}"
    
    local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
    if [[ -n $branch ]]; then
        PROMPT+=" %F{cyan}($branch)%f"
    fi
    PROMPT+=" > "
}
set_prompt
EOF

echo "Installed .zshrc to $ZSHRC_TARGET"
