#!/bin/bash

# sh 대신 bash로 스크립트 실행
#bash ./install-mecab.sh

# 패키지 목록 업데이트 및 필수 의존성 설치
if [ -f /etc/debian_version ]; then
  echo "apt-get 로 패키지 installation..."
  apt-get update
  apt-get install -y g++ gcc autoconf automake make curl sudo perl pkg-config build-essential autotools-dev
fi
# if command -v brew &>/dev/null; then
#   # Homebrew가 설치되어 있는지 확인
#   echo "Homebrew 로 패키지 installation..."
#   #brew install gcc autoconf automake make curl perl pkg-config
#   brew install gcc autoconf automake make libtool gawk mawk nawk pkg-config
# fi

# Get the shell type
SHELL_TYPE=$(basename "$SHELL")

# MeCab 및 MeCab-ko-dic 다운로드 URL
URL_MECAB=https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
URL_MECAB_DIC=https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz
DIR_MECAB=mecab-0.996-ko-0.9.2
DIR_MECAB_DIC=mecab-ko-dic-2.1.1-20180720

# 프로젝트 디렉토리 설정
cd `dirname $0`/./
PACKAGE_NAME=mecab-analyzer
PROJECT_HOME=$(pwd)
BUILD_PATH=$PROJECT_HOME/temp
echo $PACKAGE_NAME
echo $PROJECT_HOME

# Check if all required files exist
# [[ ... ]]는 Bash의 조건식 구문이지만, sh(기본 셸)에서는 이를 사용할 수 없습니다. sh에서는 [와 ] 구문만 사용
#if [[ -f "$PROJECT_HOME/bin/mecab" && -f "$PROJECT_HOME/lib/mecab/dic/mecab-ko-dic/dicrc" && -f "$PROJECT_HOME/libexec/mecab/mecab-dict-index" && $(command -v mecab) ]]; then
if [ -f "$PROJECT_HOME/bin/mecab" ] && [ -f "$PROJECT_HOME/lib/mecab/dic/mecab-ko-dic/dicrc" ] && [ -f "$PROJECT_HOME/libexec/mecab/mecab-dict-index" ] && [ $(command -v mecab) ]; then
  echo "All required files are present. Exiting the script."
  exit 0
fi
mkdir -p $BUILD_PATH

# Homebrew로 MeCab 설치 여부 확인
# if command -v brew &> /dev/null && brew list mecab &> /dev/null; then
#   # Homebrew로 설치된 MeCab가 있는 경우 경고 메시지 출력
#   echo "Warning: MeCab is already installed via Homebrew."
#   echo "Please uninstall it first using the following command:"
#   echo "  brew uninstall mecab mecab-ipadic"
#   echo "  brew uninstall --force mecab mecab-ipadic"
#   echo "  brew uninstall --ignore-dependencies mecab mecab-ipadic"
#   echo "Installation aborted."
#   exit 1
# fi

# 기존 MeCab 설치 확인
echo "Checking for existing MeCab installation..."
if command -v mecab &> /dev/null; then
  # 기존 MeCab 설치 제거
  echo "Removing existing MeCab installation..."
  rm -rf /usr/local/bin/mecab
  rm -rf /usr/local/etc/mecabrc
  rm -rf /usr/local/lib/mecab
  rm -rf /usr/local/libexec/mecab
  rm -rf /usr/local/share/mecab
  rm -rf $PROJECT_HOME/bin/mecab
  rm -rf $PROJECT_HOME/etc/mecabrc
  rm -rf $PROJECT_HOME/lib/mecab

  # 기존 PATH 설정 초기화
  echo "Resetting PATH and MECABRC environment variables..."
  sed -i '/export PATH=.*\/mecab/d' ~/.bashrc
  sed -i '/export MECABRC/d' ~/.bashrc
  sed -i '/export PATH=.*\/mecab/d' ~/.zshrc
  sed -i '/export MECABRC/d' ~/.zshrc
  export PATH=$(echo "$PATH" | sed -e "s|$PROJECT_HOME/bin:||g")
  unset MECABRC
fi

# MeCab 설치
cd $BUILD_PATH
# 로컬 파일이 있는 경우 이를 사용, 그렇지 않으면 다운로드
if [ -f "$PROJECT_HOME/$DIR_MECAB.tar.gz" ]; then
  echo "Using local MeCab tarball."
  cp $PROJECT_HOME/$DIR_MECAB.tar.gz .
else
  echo "Downloading MeCab..."
  curl -OL $URL_MECAB
fi
tar xfz $DIR_MECAB.tar.gz
cd $DIR_MECAB
make clean
./configure --prefix=$PROJECT_HOME --with-mecab-config
make
make install

# MeCab-ko-dic 설치
cd $BUILD_PATH
# 로컬 파일이 있는 경우 이를 사용, 그렇지 않으면 다운로드
if [ -f "$PROJECT_HOME/$DIR_MECAB_DIC.tar.gz" ]; then
  echo "Using local MeCab-ko-dic tarball."
  cp $PROJECT_HOME/$DIR_MECAB_DIC.tar.gz .
else
  echo "Downloading MeCab-ko-dic..."
  curl -OL $URL_MECAB_DIC
fi
tar xfz $DIR_MECAB_DIC.tar.gz
cd $DIR_MECAB_DIC
# ./configure 실행중 아래 에러가 발생하는 경우, 'mecab-analyzer/bin/mecab-config' 경로 위치를 못찾고 있음
# ```
# checking for mecab-config... no
# configure: error: mecab-config is not found in your system
# make: *** No targets specified and no makefile found.  Stop.
# make: Nothing to be done for `install'.
# ```
# [중요] make install 실행전 PATH 환경 변수를 먼저 지정해 주어야 한다.
export PATH=$PROJECT_HOME/bin:$PATH
./autogen.sh
./configure --prefix=$PROJECT_HOME --with-charset=utf8
make
make install

# PATH 및 MECABRC 환경 변수 설정 (주의! VSCode 터미널의 경우, 설치 후 새로운 터미널에서 'mecab' 명령 실행!)
export_CMD_PATH="export PATH=$PROJECT_HOME/bin:\$PATH"
export_CMD_MECABRC="export MECABRC=$PROJECT_HOME/etc/mecabrc"
# if ! grep -q "export PATH=.*$PROJECT_HOME/bin" ~/.bashrc; then
#   echo "export PATH=$PROJECT_HOME/bin:\$PATH" >> ~/.bashrc
#   echo "export MECABRC=$PROJECT_HOME/etc/mecabrc" >> ~/.bashrc
#   # ~/.bashrc 또는 ~/.zshrc 파일을 수정한 후, 변경 사항을 바로 적용하려면 source 명령어를 실행해야 합니다.
#   source ~/.bashrc
#   echo "export PATH!"
# fi
case "$SHELL_TYPE" in
  bash)
    if ! grep -q "$export_CMD_PATH" ~/.bashrc; then
      echo "$export_CMD_PATH" >> ~/.bashrc
      echo "$export_CMD_MECABRC" >> ~/.bashrc
      source ~/.bashrc
      echo "Bash environment updated with PATH and MECABRC."
    fi
    ;;
  zsh)
    if ! grep -q "$export_CMD_PATH" ~/.zshrc; then
      echo "$export_CMD_PATH" >> ~/.zshrc
      echo "$export_CMD_MECABRC" >> ~/.zshrc
      source ~/.zshrc
      echo "Zsh environment updated with PATH and MECABRC."
    fi
    ;;
  fish)
    if ! grep -q "$export_CMD_PATH" ~/.config/fish/config.fish; then
      echo "$export_CMD_PATH" >> ~/.config/fish/config.fish
      echo "$export_CMD_MECABRC" >> ~/.config/fish/config.fish
      source ~/.config/fish/config.fish
      echo "Fish environment updated with PATH and MECABRC."
    fi
    ;;
  sh)
    if ! grep -q "$export_CMD_PATH" ~/.profile; then
      echo "$export_CMD_PATH" >> ~/.profile
      echo "$export_CMD_MECABRC" >> ~/.profile
      source ~/.profile
      echo "Sh environment updated with PATH and MECABRC."
    fi
    ;;
  tcsh)
    if ! grep -q "$export_CMD_PATH" ~/.tcshrc; then
      echo "$export_CMD_PATH" >> ~/.tcshrc
      echo "$export_CMD_MECABRC" >> ~/.tcshrc
      source ~/.tcshrc
      echo "Tcsh environment updated with PATH and MECABRC."
    fi
    ;;
  *)
    echo "Unknown shell: $SHELL_TYPE. Unable to update environment variables."
    ;;
esac

# 임시 빌드 디렉토리 정리
rm -rf $BUILD_PATH

echo "MeCab installation completed."
