#!/usr/bin/env bash
# @desc: Bash 环境增强(历史高可靠/耗时提示/别名), 初始版本
# @usage: bash <(curl -sL t.melulu.top/bash_history)
#   不带参数, 直接跑
#   新版请用 shinit

# ==========================================
# 软件工程师 Bash 环境高可靠与效率增强自动配置脚本
# 作用：
# 1. 确保 Bash 历史记录高可靠性 (异常退出/并发不覆盖)
# 2. 提高历史记录容量至 1,000,000 条
# 3. 优化 PATH 路径和设置 Vim 为默认编辑器
# 4. 新增高效别名 (ll, g, gs 等)
# 5. 增强提示符功能：显示长耗时命令的执行时间 (>= 5秒)
# ==========================================

set -e

BASHRC="$HOME/.bashrc"

# --- 唯一标记，用于防止重复写入 ---
BEGIN_MARK_HISTORY="# >>> bash_history_safe_config >>>"
END_MARK_HISTORY="# <<< bash_history_safe_config <<<"

BEGIN_MARK_DEV="# >>> LULU_dev_enhancements >>>"
END_MARK_DEV="# <<< LULU_dev_enhancements <<<"


# --- 1. 定义历史记录配置内容 (高可靠性) ---
HISTORY_CONFIG=$(cat << 'EOF'
# ----------------------------------------------------
# >>> bash_history_safe_config >>>
# Bash 历史记录高可靠与大容量配置

# 历史记录容量（提高一个数量级）
HISTSIZE=1000000
HISTFILESIZE=2000000

# 忽略重复命令和以空格开头的命令
export HISTCONTROL=ignoreboth

# 多个 shell 并发时只追加不覆盖
shopt -s histappend

# 记录命令执行时间
export HISTTIMEFORMAT="%F %T "

# 每条命令执行完成后立即写入历史文件
# 注意：PROMPT_COMMAND 后面会被覆盖，用于计时功能
export PROMPT_COMMAND='history -a'

# <<< bash_history_safe_config <<<
# ----------------------------------------------------
EOF
)

# --- 2. 定义开发效率增强配置内容 ---
DEV_CONFIG=$(cat << 'EOF'
# ----------------------------------------------------
# >>> LULU_dev_enhancements >>>
# 软件开发效率增强配置

# --- 0. Locale 修正 (解决缺失 Locale 文件导致的警告和乱码问题) ---
export LANG="C.UTF-8"
export LC_ALL="C.UTF-8"

# --- 1. PATH 优化 ---
# 确保本地 bin 目录被添加到 PATH (如果存在)
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

# --- 2. 默认编辑器设置 (使用 Vim) ---
export EDITOR='vim'
export VISUAL='vim'

# --- 3. 增强别名 ---
alias cls='clear'      # 清屏
alias h='history'      # 快速查看历史记录
alias ll='ls -l'       # 详细列表
alias la='ls -a'       # 显示隐藏文件
alias lh='ls -lh'      # 详细列表并显示人性化文件大小

# --- 4. Git 别名 (嵌入式/软件开发常用) ---
alias g='git'
alias ga='git add'
alias gc='git commit'
alias gs='git status -sb' # 简洁状态
alias gl='git log --oneline --decorate --all --graph' # 美化日志

# --- 5. PS1 增强：精准显示命令耗时 (如果超过 5s) ---
# 确保在 .bashrc 加载时，设置命令开始时间 (初始化全局变量)
export CMD_START_TIME=$SECONDS 

# PROMPT_COMMAND 函数：在显示提示符之前执行
_show_cmd_time() {
    local DURATION=0
    local EXIT_CODE=$?

    # 检查内置变量 $CMD_START_TIME 是否存在
    if [ -n "$CMD_START_TIME" ]; then
        # 计算当前命令的实际执行时间 (秒)
        # $SECONDS 记录 Shell 启动以来的秒数，在 PROMPT_COMMAND 运行时更新
        DURATION=$((SECONDS - CMD_START_TIME))
        
        # 仅显示耗时超过阈值的命令 (修正阈值 >= 5s)
        if [ $DURATION -ge 0 ]; then
            # 使用 $? 获取上一个命令的退出码，并设置颜色
            if [ $EXIT_CODE -eq 0 ]; then
                # 成功 (绿色)
                echo -e "\n[\033[0;32m✓\033[0m] Command finished in \033[0;33m${DURATION}s\033[0m."
            else
                # 失败 (红色)
                echo -e "\n[\033[0;31m✗\033[0m] Command exited with ${EXIT_CODE} in \033[0;33m${DURATION}s\033[0m."
            fi
        fi
    fi
    
    # 无论如何，在显示提示符前，记录当前时间作为下一个命令的开始时间
    # 这一行必须在函数末尾
    CMD_START_TIME=$SECONDS
}

# 6. PROMPT_COMMAND 最终设置
# 保证 history -a 和计时函数都能执行
export PROMPT_COMMAND='history -a; _show_cmd_time'

# <<< LULU_dev_enhancements <<<
# ----------------------------------------------------
EOF
)

# --- 3. 写入配置到 .bashrc ---

# 写入历史记录配置
if grep -q "$BEGIN_MARK_HISTORY" "$BASHRC"; then
    echo "[INFO] 历史记录配置已存在，跳过写入。"
else
    echo "[INFO] 正在写入高可靠历史记录配置..."
    echo "" >> "$BASHRC"
    echo "$HISTORY_CONFIG" >> "$BASHRC"
    echo "[OK] 历史记录配置已写入。"
fi

# 写入开发增强配置
if grep -q "$BEGIN_MARK_DEV" "$BASHRC"; then
    echo "[INFO] 开发增强配置已存在，跳过写入。"
else
    echo "[INFO] 正在写入开发效率增强配置..."
    echo "" >> "$BASHRC"
    echo "$DEV_CONFIG" >> "$BASHRC"
    echo "[OK] 开发增强配置已写入。"
fi

# --- 4. 立即生效 ---
echo "[INFO] 正在加载 ~/.bashrc 使配置立即生效..."
# shellcheck source=/dev/null
source "$BASHRC"

echo "[SUCCESS] Bash 环境增强配置已全面生效。"
echo "         - 历史记录：高可靠、大容量 (HISTSIZE=1000000)"
echo "         - 效率优化：Vim 默认编辑器、高效别名 (ll, g, gs)"
echo "         - 提示符增强：长命令耗时显示 (> 5s)"