#!/usr/bin/env bash

set -eu

declare name
declare yn
declare systemInfo
declare endpoint
declare diskInfo

function trim() {
  local var="$*"
  # remove leading whitespace characters
  var="${var#"${var%%[![:space:]]*}"}"
  # remove trailing whitespace characters
  var="${var%"${var##*[![:space:]]}"}"
  printf '%s' "$var"
}

function askName() {
  while true; do
    echo -n "このMacの利用者のお名前を入力してください(例, Taro Yamada): "
    read -r name
    name=$(trim "$name")
    if [ "$name" != "" ]; then
      break
    fi
  done
  confirmName
}

function confirmName() {
  echo -n "お名前は「${name}」でよろしいですか？ (y/n): "
  read -r yn
  case $yn in
  y | Y)
    # OK
    ;;
  n | N)
    askName
    ;;
  *)
    echo "yかnを入力してください。"
    confirmName
    ;;
  esac
}

function enableSystemProfiler() {
  which system_profiler || {
    echo "下記コマンドを実行してからもう一度お試しください。"
    echo "chroot /Volumes/Macintosh\ HD zsh"
    exit 1
  }
}

function getSystemInfo() {
  systemInfo=$(system_profiler SPHardwareDataType SPSoftwareDataType SPDisplaysDataType SPNVMeDataType)
}

function getDiskInfo() {
  diskInfo=$(df -h)
}

function confirmBeforeSend() {
  echo -n "以上の情報を送信してよろしいですか(y/n): "
  read -r yn
  case $yn in
  y | Y)
    # OK
    ;;
  n | N)
    exit
    ;;
  *)
    echo "yかnを入力してください。"
    confirmBeforeSend
    ;;
  esac
}

function getPayload() {
  echo -en "Name: ${name}\n\n$systemInfo\n\ndisk\n\n${diskInfo}"
}

enableSystemProfiler
endpoint="https://macinfo-5ue59mgh1-suin.vercel.app/api/send"
endpoint=${1:-$endpoint}
if [ "$endpoint" = "" ]; then
  echo "endpointを指定してください。"
  exit 1
fi
echo -n "[Disclaimer] このプログラムはMacのシステム情報(シリアル番号やスペックなど)を、ISMS担当者に送信するものです。"
echo -n "ISMSでは機器を特定する必要があり、このプログラムで取得されたシステム情報は、ISMSの機器管理に利用されます。"
echo -e "\n\n"
askName
getSystemInfo
getDiskInfo
payload=$(getPayload)
echo -e "\n\n::: 送信する情報 :::"
echo -en "\n${payload}\n"
confirmBeforeSend

echo "システム情報を送信しています…"

curl -s --show-error --fail -L -k -X POST -H "Content-Type: text/plain" --data "$payload" "$endpoint" || {
  echo "送信に失敗しました。お手数ですが再度お試し下さい。問題が解決しない場合は担当者にお問い合わせ下さい。"
  exit 1
}

echo "送信が完了しました。ご協力ありがとうございました。"
