#!/bin/bash

#######################################
# CentOS 초기 설정 스크립트
# 사용법: ./setup_centos.sh
#######################################

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

# 색상 정의
CYAN='\033[0;36m'
BLUE='\033[1;94m'  # 밝은 파란색
PURPLE='\033[0;35m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 로고 출력
echo -e "${CYAN}"

# OS 감지
OS_TYPE=$(uname -s)
if [[ "$OS_TYPE" == "Darwin" ]]; then
    # macOS
    RC_FILE="$HOME/.zshrc"
    RC_NAME="~/.zshrc"
    SHELL_TYPE="zsh"
elif [[ "$OS_TYPE" == "Linux" ]]; then
    # Linux (CentOS)
    RC_FILE="$HOME/.bashrc"
    RC_NAME="~/.bashrc"
    SHELL_TYPE="bash"
else
    echo -e "${RED}지원하지 않는 OS입니다: $OS_TYPE${NC}"
    exit 1
fi

echo -e "$RC_NAME 설정 추가"
echo -e "${YELLOW}$RC_NAME 에 커스텀 설정을 추가하시겠습니까? (y/N):${NC} \c"
read -n 1 -r REPLY_BASHRC
echo

# n 또는 다른 입력인 경우 CentOS에서는 /etc/bashrc 물어보기
if [[ ! $REPLY_BASHRC =~ ^[Yy]$ ]]; then
    # CentOS인 경우 /etc/bashrc 수정 여부 확인
    if [[ "$OS_TYPE" == "Linux" ]]; then
        echo -e "${YELLOW}/etc/bashrc 에 커스텀 설정을 추가하시겠습니까? (y/N):${NC} \c"
        read -n 1 -r REPLY_ETC_BASHRC
        echo

        # /etc/bashrc도 아니면 종료
        if [[ ! $REPLY_ETC_BASHRC =~ ^[Yy]$ ]]; then
            echo -e "${YELLOW}⊘${NC} 설정을 건너뜁니다."
            echo ""
            exit 0
        fi

        # /etc/bashrc만 수정하고 종료
        SKIP_USER_BASHRC=true
    else
        # macOS는 그냥 종료
        echo -e "${YELLOW}⊘${NC} 설정을 건너뜁니다."
        echo ""
        exit 0
    fi
fi


# y인 경우 설정 진행

# Linux인 경우이고 ~/.bashrc를 수정하기로 했다면 /etc/bashrc 질문 추가
if [[ "$OS_TYPE" == "Linux" ]] && [[ ! $SKIP_USER_BASHRC == true ]]; then
    echo -e "${YELLOW}/etc/bashrc 에도 커스텀 설정을 추가하시겠습니까? (y/N):${NC} \c"
    read -n 1 -r REPLY_ETC_BASHRC
    echo
fi

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

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

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

#######################################
# pty-bash 에 의한 ~/.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 -alv"
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

# centos 에 설정
elif [[ "$OS_TYPE" == "Linux" ]]; then
    # CentOS 공통 설정 내용을 변수로 정의
    read -r -d '' CENTOS_BASHRC_CONTENT << 'EOF' || true
# 프롬프트 색상 설정
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

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

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

# 유용한 alias
alias ll='ls -alF'
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

    # ~/.bashrc 수정 (SKIP_USER_BASHRC가 true가 아닐 때만)
    if [[ ! $SKIP_USER_BASHRC == true ]]; then
        # 백업 생성
        cp ~/.bashrc ~/.bashrc.backup.$(date +%Y%m%d_%H%M%S)

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

#######################################
# pty-bash 에 의한 ~/.bashrc 추가 시작
#######################################

$CENTOS_BASHRC_CONTENT

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

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

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

    # /etc/bashrc 처리
    if [[ $REPLY_ETC_BASHRC =~ ^[Yy]$ ]]; 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

#######################################
# pty-bash 에 의한 /etc/bashrc 추가 시작
#######################################

$CENTOS_BASHRC_CONTENT

#######################################
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 -e "${GREEN}✓${NC} /etc/bashrc 설정이 완료되었습니다."
    fi

fi

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

