#!/usr/bin/env bash

# 패키지 설치 상태 확인 함수
function check_package_installed() {
  local package=$1
  if command -v "$package" >/dev/null 2>&1; then
    echo "$package is already installed"
    return 0
  else
    echo "$package is not installed"
    return 1
  fi
}

# 패키지 매니저 감지
function detect_package_manager() {
  if command -v apt >/dev/null 2>&1; then
    echo "apt"
  elif command -v yum >/dev/null 2>&1; then
    echo "yum"
  else
    echo "unsupported"
  fi
}

function install_system_packages() {
  local REQUIRED_PACKAGES=("$@") # 모든 인자를 로컬 배열로 받음

  NOT_INSTALLED=()

  for pkg in "${REQUIRED_PACKAGES[@]}"; do
    if ! check_package_installed "$pkg"; then
      NOT_INSTALLED+=("$pkg")
    fi
  done

  # 설치할 패키지가 있는 경우에만 패키지 매니저 실행
  if [ ${#NOT_INSTALLED[@]} -gt 0 ]; then
    PKG_MANAGER=$(detect_package_manager)

    if [ "$PKG_MANAGER" = "unsupported" ]; then
      echo "지원되는 패키지 매니저(apt 또는 yum)를 찾을 수 없습니다." >&2
      exit 1
    fi

    echo "설치할 패키지: ${NOT_INSTALLED[*]}"

    if [ "$PKG_MANAGER" = "apt" ]; then
      apt update
      apt install -y "${NOT_INSTALLED[@]}"
    else
      yum install -y "${NOT_INSTALLED[@]}"
    fi
  else
    echo "모든 필요한 패키지가 이미 설치되어 있습니다."
  fi
}

function commissioning() {
  local SERVER_URL=$1

  rm -rf /tmp/kiera
  mkdir /tmp/kiera
  cd /tmp/kiera

  # 스크립트 파일들 다운로드
  FILES=(
    "static/provisioning/script/lib/commissioning.py"
    "static/provisioning/script/lib/kiera.py"
  )

  echo "스크립트 파일들을 다운로드합니다..."
  for path in "${FILES[@]}"; do
    url="${SERVER_URL}/${path}"
    filename=$(basename "$path")
    echo "Downloading: ${filename}"
    curl -fsSLO "${url}"
  done

  # 커미셔닝 실행
  echo "커미셔닝을 실행합니다..."
  python3 commissioning.py --server "${SERVER_URL}"

  # 정리
  echo "임시 파일들을 정리합니다..."
  cd /tmp
  rm -rf /tmp/kiera

  echo "작업이 완료되었습니다."
}

set -euo pipefail

SERVER_URL="http://${1:-192.168.50.5}"
REQUIRED_PACKAGES=(ipmitool python3 curl)
install_system_packages "${REQUIRED_PACKAGES[@]}"
commissioning "$SERVER_URL"
