#!/bin/mksh
# Interactive mksh configuration
# Source login profile if not already loaded
[ -z "$EDITOR" ] && . "$HOME/.profile"

# Vi mode
set -o vi

# Prompt: user@host:dir >
PS1='$(print -n "\033[34m")${USER}$(print -n "\033[0m")@$(print -n "\033[35m")$(hostname -s)$(print -n "\033[0m"):$(print -n "\033[36m")${PWD/#$HOME/\~}$(print -n "\033[0m") > '

# History
HISTFILE="$HOME/.mksh_history"
HISTSIZE=10000

# Core utilities
alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -vI'
alias mkd='mkdir -pv'
alias grep='grep --color=auto'
alias diff='diff --color=auto'

# Modern CLI replacements
alias ls='eza --icons --group-directories-first'
alias ll='eza -la --icons --group-directories-first'
alias la='eza -a --icons --group-directories-first'
alias lt='eza --tree --icons --group-directories-first'
alias cat='bat --paging=never'

# Shortcuts
alias ka='killall'
alias g='git'
alias e='$EDITOR'
alias v='$EDITOR'
alias p='pacman'
alias z='zathura'
alias bin='nnn ~/.local/bin'

# System
alias logout='pkill -KILL -u krisyotam'
alias lock='slock'
alias shutdown='sudo shutdown now'
alias restart='sudo reboot'

# Terminal UI
alias mutt='neomutt'
alias top='btop'
alias htop='btop'
alias vim='nvim'

# Nvim profiles
alias write='NVIM_APPNAME=write nvim'
alias code='NVIM_APPNAME=code nvim'

# Corpus directories
alias content='cd $HOME/.corpus/content'
alias til='cd $HOME/.corpus/til'
alias sb='cd $HOME/.corpus/slipbox'

# Tome shortcuts
alias tc='tome -nnn -create'
alias te='tome -nnn -edit'
alias td='tome -nnn -data'

# Claude Code
alias claude='claude --dangerously-skip-permissions'

# Git
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git pull'
alias gs='git status'
alias gd='git diff'
alias gco='git checkout'
alias gb='git branch'
alias glog='git log --oneline --graph'

# Sudo
alias sv='sudo nvim'
alias sp='sudo pacman'

# Edit configs
alias mkshrc='$EDITOR ~/.mkshrc'
alias nvimrc='$EDITOR ~/.config/nvim/init.lua'

# Applications
alias browser='$BROWSER &'
alias rss='sfeed_curses ~/.sfeed/feeds/*'
alias torrent='rtorrent'

# Maritime Monitoring (Monarch Suite)
alias ssta='sea-surface-temperature-anomaly'
alias ohci='ocean-heat-content-index'
alias ssm='subsea-seismic-monitor'
alias svm='supervolcano-monitor'
alias kpi='kaiju-probability-index'
alias mc='maritime-charts'

# Application launchers (backgrounded)
alias warp='warp-terminal >/dev/null 2>&1 &'
alias mouse='mouseless >/dev/null 2>&1 &'

# Fastfetch
alias ff='fastfetch'

# --- Functions ---

# nnn with cd on exit
n() {
	if [ -n "$NNNLVL" ] && [ "$NNNLVL" -ge 1 ]; then
		echo "nnn is already running"
		return
	fi
	NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
	export NNN_TMPFILE
	nnn -Q "$@"
	if [ -f "$NNN_TMPFILE" ]; then
		. "$NNN_TMPFILE"
		rm -f "$NNN_TMPFILE"
	fi
}

# Script editor -- pick and edit scripts in ~/.local/bin
se() {
	choice=$(find ~/.local/bin -mindepth 1 -printf '%P\n' | fzf)
	[ -n "$choice" ] && [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice"
}

# feedsync -- sync kris.opml into sfeedrc
feedsync() {
	opml="$HOME/dev/krisyotam.com/public/kris.opml"
	if [ ! -f "$opml" ]; then
		echo "feedsync: $opml not found" >&2
		return 1
	fi
	sfeed_opml_import <"$opml" >"$HOME/.sfeed/sfeedrc"
	echo "sfeedrc updated from kris.opml"
}

# Launch Google Earth Pro (detached)
earth() {
	setsid google-earth-pro >/dev/null 2>&1 &
}

# Zoxide (smarter cd)
command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init posix --hook prompt)"

# Direnv
command -v direnv >/dev/null 2>&1 && eval "$(direnv hook ksh)"

# History logging (encrypted with SQLCipher)
_kh_db="$HOME/.local/share/history/history.db"
_kh_key_file="$HOME/.local/share/history/.key"

_kh_log() {
	typeset cmd="$1" exit_code="$2" pwd_path="$PWD"
	[ -z "$cmd" ] && return
	case "$cmd" in history*) return ;; esac
	[ -f "$_kh_key_file" ] || return
	[ -f "$_kh_db" ] || return
	typeset escaped_cmd=$(print -r -- "$cmd" | sed "s/'/''/g")
	typeset escaped_pwd=$(print -r -- "$pwd_path" | sed "s/'/''/g")
	typeset key=$(cat "$_kh_key_file")
	(sqlcipher "$_kh_db" "PRAGMA key = '$key'; INSERT INTO terminal_history (command, exit_code, pwd, shell) VALUES ('$escaped_cmd', $exit_code, '$escaped_pwd', 'mksh');" &) >/dev/null 2>&1
}

# PS4 trap to capture commands for history logging
_kh_last_cmd=""
trap '_kh_last_cmd=$(fc -ln -1 2>/dev/null | sed "s/^[[:space:]]*//")' DEBUG
PROMPT_COMMAND='_kh_log "$_kh_last_cmd" "$?"'
