#!/bin/bash
# Akadem Drive AD-1 — インストーラ (macOS)
#
# Finder でダブルクリックすると Terminal で開きます。
# 同じフォルダに入っているプラグインを、あなたのユーザ領域だけにコピーします。
# 管理者パスワードは要りません (/Library ではなく ~/Library に入れるため)。
set -uo pipefail
cd "$(dirname "$0")"

NAME="Akadem Drive AD-1"
HOME_PI="$HOME/Library/Audio/Plug-Ins"

say()  { printf '%s\n' "$*"; }
rule() { printf '%s\n' "----------------------------------------------------------"; }

rule
say "  筑波音響 Akadem Drive AD-1 — インストーラ"
rule
say

# ---------------------------------------------------------------- 何を入れるか
# 同梱されている形式だけを対象にする (無いものは黙って飛ばす)
declare -a SRC DST LABEL
add() { [[ -d "$1" ]] && { SRC+=("$1"); DST+=("$2"); LABEL+=("$3"); }; }
add "$NAME.component" "$HOME_PI/Components" "Audio Unit  (Logic / GarageBand)"
add "$NAME.clap"      "$HOME_PI/CLAP"       "CLAP        (Reaper / Bitwig / Studio One 7)"
# VST3 は出していない (GPLv3 の都合。THIRD-PARTY.txt に理由がある)

if [[ ${#SRC[@]} -eq 0 ]]; then
  say "プラグインが見つかりません。"
  say "このスクリプトは、配布フォルダの中身をそのままにして実行してください"
  say "(.component / .clap と同じ階層に置く必要があります)。"
  say
  say "いまの場所: $PWD"
  read -r -p "Enter で閉じます " _
  exit 1
fi

say "入れるもの:"
for i in "${!SRC[@]}"; do
  say "  · ${LABEL[$i]}"
  say "      → ${DST[$i]}/"
done
say

# ------------------------------------------------------- 隔離属性について説明する
say "このプラグインには Apple の開発者署名がありません。"
say "そのため macOS はダウンロードしたファイルに «隔離» の印を付けており、"
say "そのままでは DAW が読み込めません。このスクリプトは"
say "**いまコピーしたバンドルに対してだけ** その印を外します:"
say
say "    xattr -dr com.apple.quarantine <入れたバンドル>"
say
say "他のファイルには一切触れません。同じことを手でやりたい場合は、"
say "上のコマンドをコピー先のパスに対して実行すれば同じ結果になります。"
say
read -r -p "続けてよければ Enter、やめるなら Ctrl-C: " _
say

# -------------------------------------------------------------------- コピーする
fail=0
for i in "${!SRC[@]}"; do
  src="${SRC[$i]}"
  dst="${DST[$i]}/$(basename "$src")"
  say "== ${LABEL[$i]}"

  mkdir -p "${DST[$i]}" || { say "   フォルダを作れません: ${DST[$i]}"; fail=1; continue; }

  # 古いものを消してから入れる。上書きコピーだと、消えたはずのファイルが
  # 中に残って古い版が読まれることがある
  if [[ -e "$dst" ]]; then
    say "   既にあるものを置き換えます"
    rm -rf "$dst" || { say "   古い版を消せません: $dst"; fail=1; continue; }
  fi

  if ! cp -R "$src" "$dst"; then
    say "   コピーに失敗しました"
    fail=1
    continue
  fi

  # 隔離属性は「いま入れたもの」にだけ外す
  xattr -dr com.apple.quarantine "$dst" 2>/dev/null
  say "   入れました"
done
say

# ------------------------------------------------- AU は登録キャッシュを作り直させる
if [[ -d "$HOME_PI/Components/$NAME.component" ]]; then
  say "== Audio Unit の登録を作り直しています"
  killall -9 AudioComponentRegistrar >/dev/null 2>&1
  # 一覧に出るまで待つ。待たずに Logic を開くと «見つからない» ことがある。
  # 作り直しは非同期で、実測では 20 秒では足りないことがあった
  say "   (初回は少し時間がかかります)"
  for _ in $(seq 1 60); do
    auval -a 2>/dev/null | grep -q "aufx Ad01 Tsuk" && break
    sleep 1
  done
  if auval -a 2>/dev/null | grep -q "aufx Ad01 Tsuk"; then
    say "   認識されました (aufx Ad01 Tsuk)"
  else
    # 失敗ではない。登録は DAW を開くときにも作り直される
    say "   まだ一覧に出ていません — DAW を開き直せば出ます"
  fi
  say
fi

rule
if [[ $fail -eq 0 ]]; then
  say "  終わりました。DAW を起動し直すと出てきます。"
else
  say "  一部が入りませんでした。上の «失敗» の行を見てください。"
fi
rule
say
say "出てこないときは:"
say "  · DAW を完全に終了してから開き直す (起動時にしか探さないホストがあります)"
say "  · Reaper / Bitwig は «プラグインを再スキャン» を明示的に実行する"
say "  · Pro Tools には対応していません (AAX 版はありません)"
say
say "消したいときは、同じフォルダの uninstall.command を実行してください。"
say "困ったときは https://akadem.tsukubaonkyo.com/support"
say
read -r -p "Enter で閉じます " _
