#!/bin/bash

#######################################
# Bash/Zsh 설정 스크립트
# 사용법: ./ptySetBash [--install-global]
#
# 옵션:
#   --install-global    /etc/bashrc에 설치 (Linux 전용, root 필요)
#   (기본)              ~/.bashrc 또는 ~/.zshrc에 설치
#######################################

set -e  # 에러 발생 시 스크립트 중단

# 색상 정의
CYAN='\033[0;36m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 옵션 파싱
INSTALL_GLOBAL=false
for arg in "$@"; do
    case $arg in
        --install-global)
            INSTALL_GLOBAL=true
            ;;
    esac
done

# OS 감지
OS_TYPE=$(uname -s)

# --install-global 옵션 처리
if [[ "$INSTALL_GLOBAL" == true ]]; then
    if [[ "$OS_TYPE" != "Linux" ]]; then
        echo -e "${RED}[ERROR]${NC} --install-global 옵션은 Linux에서만 사용 가능합니다."
        exit 1
    fi
    RC_FILE="/etc/bashrc"
    RC_NAME="/etc/bashrc"
    SHELL_TYPE="bash"
elif [[ "$OS_TYPE" == "Darwin" ]]; then
    # macOS
    RC_FILE="$HOME/.zshrc"
    RC_NAME="~/.zshrc"
    SHELL_TYPE="zsh"
elif [[ "$OS_TYPE" == "Linux" ]]; then
    # Linux
    RC_FILE="$HOME/.bashrc"
    RC_NAME="~/.bashrc"
    SHELL_TYPE="bash"
else
    echo -e "${RED}지원하지 않는 OS입니다: $OS_TYPE${NC}"
    exit 1
fi

# 현재 스크립트 실행 경로 저장
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

echo -e "${YELLOW}[INFO]${NC} $RC_NAME 에 설정을 추가합니다..."

# --install-global: /etc/bashrc에 설치
if [[ "$INSTALL_GLOBAL" == true ]]; then
    # 백업 생성
    sudo cp /etc/bashrc /etc/bashrc.backup.$(date +%Y%m%d_%H%M%S)

    # /etc/bashrc 추가할 내용
    sudo tee -a /etc/bashrc > /dev/null << 'EOF'

#######################################
# ptySetBash 에 의한 /etc/bashrc 추가 시작
#######################################

# 프롬프트 색상 설정
# SERVER_WARNING="⚠️  WARNING: REAL SERVER - BE CAREFUL!"
# WARNING_COLOR="01;31"  # 빨간색

ptyParseGitBranch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}

export PS1='\[\033[01;36m\][\D{%Y-%m-%d %H:%M:%S}]\[\033[00m\] \[\033['"${WARNING_COLOR:-00;37}"'m\]'"${SERVER_WARNING}"'\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\]$(ptyParseGitBranch)\[\033[00m\]\$ '


# 히스토리 설정
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

# 기본 에디터 설정
export EDITOR=vi

# 유용한 alias
alias ll='ls -alF --time-style="+%Y-%m-%d %H:%M:%S"'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'

# git 관련 명령
alias gs="git status"
alias gd="git diff --word-diff"
alias ga="git add"
alias gb="git branch"
alias gc="git checkout"
alias gl="git log --date=format:'%Y-%m-%d %H:%M:%S'"

# 2025-09-25 깃 add, commit 처리. gac "커밋내용"
gac() {
  git add -A
  git commit -m "$*"
}


## git show 에서 파일명 깨짐 방지
git config --global core.quotepath false

## git 자소 분리시 해결
git config --global core.precomposeunicode true

## git color
git config --global color.ui true
git config --global color.status.changed "#ff0000 normal bold"
git config --global color.status.untracked "#dd99dd normal bold"
git config --global color.status.header "#ffffff normal bold"

## user 설정
git config --global user.name "KwangHee Yoo"
git config --global user.email "cpueblo@platyhouse.com"

## git 인증 정보 저장
# git config credential.helper store

# . 명령.sh 실행을 위함
PATH=$PATH:.

#######################################
EOF

    # 스크립트 실행 경로를 PATH 에 추가
    echo "" | sudo tee -a /etc/bashrc > /dev/null
    echo "# 스크립트 실행 경로 추가" | sudo tee -a /etc/bashrc > /dev/null
    echo "PATH=\$PATH:$SCRIPT_DIR" | sudo tee -a /etc/bashrc > /dev/null

    echo "alias cd_pty=\"cd $SCRIPT_DIR\"" | sudo tee -a /etc/bashrc > /dev/null

    echo -e "${GREEN}✓${NC} /etc/bashrc 설정이 완료되었습니다."
    echo ""
    exit 0
fi

# 맥 설정
if [[ "$OS_TYPE" == "Darwin" ]]; then
    # 백업 생성
    cp ~/.zshrc ~/.zshrc.backup.$(date +%Y%m%d_%H%M%S)

    # ~/.zshrc 추가할 내용
    cat >> ~/.zshrc << 'EOF'

#######################################
# ptySetBash 에 의한 ~/.zshrc 추가 시작
#######################################

# ls, ll 정의
COLOR_DEF=$'\e[0m'
COLOR_USR=$'\e[38;5;243m'
COLOR_DIR=$'\e[38;5;197m'
COLOR_GIT=$'\e[38;5;39m'
export TERM=xterm-color
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
export GREP_OPTIONS='--color=auto'

# 프롬프트 정의
function parse_git_branch() {
    git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}

setopt PROMPT_SUBST
#export PROMPT='${COLOR_USR}%n ${COLOR_DIR}%~ ${COLOR_GIT}$(parse_git_branch)${COLOR_DEF} $ '
export PROMPT='%n %~ $(parse_git_branch) $ '

# 유용한 alias
alias ll="ls -alF --time-style="+%Y-%m-%d %H:%M:%S""
alias ls='ls -GFh'

# git 관련 명령
alias gs="git status"
alias gd="git diff --word-diff"
alias ga="git add"
alias gb="git branch"
alias gc="git checkout"
alias gl="git log --date=format:'%Y-%m-%d %H:%M:%S'"

# 2025-09-25 깃 add, commit 처리. gac "커밋내용"
gac() {
  git add -A
  git commit -m "$*"
}

## git show 에서 파일명 깨짐 방지
git config --global core.quotepath false

## git 자소 분리시 해결
git config --global core.precomposeunicode true

## git color
git config --global color.ui true
git config --global color.status.changed "#ff0000 normal bold"
git config --global color.status.untracked "#dd99dd normal bold"
git config --global color.status.header "#ffffff normal bold"

## user 설정
git config --global user.name "KwangHee Yoo"
git config --global user.email "cpueblo@platyhouse.com"

## git 인증 정보 저장
# git config credential.helper store

# . 명령.sh 실행을 위함
PATH=$PATH:.

#######################################
EOF

    # 스크립트 실행 경로를 PATH 에 추가
    echo "" >> ~/.zshrc
    echo "# 스크립트 실행 경로 추가" >> ~/.zshrc
    echo "PATH=\$PATH:$SCRIPT_DIR" >> ~/.zshrc

    echo "alias cd_pty=\"cd $SCRIPT_DIR\"" >> ~/.zshrc

# Linux 설정
elif [[ "$OS_TYPE" == "Linux" ]]; then
    # 백업 생성
    cp ~/.bashrc ~/.bashrc.backup.$(date +%Y%m%d_%H%M%S)

    # ~/.bashrc 추가할 내용
    cat >> ~/.bashrc << 'EOF'

#######################################
# ptySetBash 에 의한 ~/.bashrc 추가 시작
#######################################

# 프롬프트 색상 설정
# SERVER_WARNING="⚠️  WARNING: REAL SERVER - BE CAREFUL!"
# WARNING_COLOR="01;31"  # 빨간색

ptyParseGitBranch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}

export PS1='\[\033[01;36m\][\D{%Y-%m-%d %H:%M:%S}]\[\033[00m\] \[\033['"${WARNING_COLOR:-00;37}"'m\]'"${SERVER_WARNING}"'\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\]$(ptyParseGitBranch)\[\033[00m\]\$ '


# 히스토리 설정
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

# 기본 에디터 설정
export EDITOR=vi

# 유용한 alias
alias ll='ls -alF --time-style="+%Y-%m-%d %H:%M:%S"'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'

# git 관련 명령
alias gs="git status"
alias gd="git diff --word-diff"
alias ga="git add"
alias gb="git branch"
alias gc="git checkout"
alias gl="git log --date=format:'%Y-%m-%d %H:%M:%S'"

# 2025-09-25 깃 add, commit 처리. gac "커밋내용"
gac() {
  git add -A
  git commit -m "$*"
}


## git show 에서 파일명 깨짐 방지
git config --global core.quotepath false

## git 자소 분리시 해결
git config --global core.precomposeunicode true

## git color
git config --global color.ui true
git config --global color.status.changed "#ff0000 normal bold"
git config --global color.status.untracked "#dd99dd normal bold"
git config --global color.status.header "#ffffff normal bold"

## user 설정
git config --global user.name "KwangHee Yoo"
git config --global user.email "cpueblo@platyhouse.com"

## git 인증 정보 저장
# git config credential.helper store

# . 명령.sh 실행을 위함
PATH=$PATH:.

#######################################
EOF

    # 스크립트 실행 경로를 PATH 에 추가
    echo "" >> ~/.bashrc
    echo "# 스크립트 실행 경로 추가" >> ~/.bashrc
    echo "PATH=\$PATH:$SCRIPT_DIR" >> ~/.bashrc

    echo "alias cd_pty=\"cd $SCRIPT_DIR\"" >> ~/.bashrc

fi

echo -e "${GREEN}✓${NC} $RC_NAME 설정이 완료되었습니다."
echo ""
