# =====================================================================
#  SuperMovie キット 自動セットアップ（Windows用）
#  「セットアップ_Windows.bat」から呼び出されます。
#  動画編集ツールを自動で入れて、スキル・SE・BGMを配置します。
# =====================================================================
$ErrorActionPreference = "Stop"
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

function Line { Write-Host "------------------------------------------------------------" }
function Ok($m)   { Write-Host "  [OK] $m" -ForegroundColor Green }
function Info($m) { Write-Host "  ・$m" }
function Warn($m) { Write-Host "  [!] $m" -ForegroundColor Yellow }

$KIT        = Split-Path -Parent $MyInvocation.MyCommand.Path
$PluginSrc  = Join-Path $KIT "plugin"
$SeSrc      = Join-Path $KIT "assets\_SEライブラリ"

$Home2      = $env:USERPROFILE
$PluginDst  = Join-Path $Home2 ".claude\plugins\supermovie"
$SkillsDir  = Join-Path $Home2 ".claude\skills"
$SeDst      = Join-Path $Home2 "Desktop\動画編集\_SEライブラリ"

$Owner      = "/Users/noguchimasatomo"                 # 作者環境（POSIXパス）
$HomePosix  = "C:/Users/" + (Split-Path $Home2 -Leaf)  # → C:/Users/あなたの名前

Clear-Host
Line
Write-Host "  SuperMovie 動画編集キット セットアップ（Windows）"
Line
Write-Host "  このまま自動で進みます。管理者の確認が出たら『はい』を押してください。"
Write-Host ""

if (-not (Test-Path $PluginSrc) -or -not (Test-Path $SeSrc)) {
  Warn "キットの中身が見つかりません。ZIPを解凍してから実行してください。"
  Read-Host "Enterで終了"; exit 1
}

# --- 1. winget 確認 -------------------------------------------------
Write-Host "[1/5] インストーラー(winget)を確認..."
if (-not (Get-Command winget -ErrorAction SilentlyContinue)) {
  Warn "winget がありません。Microsoft Store から『アプリ インストーラー』を入れてください。"
  Warn "やり方がわからなければ、この文章を Claude Code / Codex に貼って『winget を入れて』と頼めばOKです。"
  Read-Host "Enterで終了"; exit 1
}
Ok "winget OK"

# --- 2. 必須ツール ---------------------------------------------------
Write-Host ""
Write-Host "[2/5] 動画編集ツールを確認..."
$tools = @(
  @{name="ffmpeg";  id="Gyan.FFmpeg"},
  @{name="node";    id="OpenJS.NodeJS"},
  @{name="python";  id="Python.Python.3.12"}
)
foreach ($t in $tools) {
  if (Get-Command $t.name -ErrorAction SilentlyContinue) { Ok "$($t.name) は既に入っています" }
  else {
    Info "$($t.name) をインストールします"
    winget install --id $t.id -e --accept-source-agreements --accept-package-agreements --silent
  }
}

# --- 3. 配置 ---------------------------------------------------------
Write-Host ""
Write-Host "[3/5] スキルと素材を配置..."
New-Item -ItemType Directory -Force -Path $PluginDst, $SkillsDir, $SeDst | Out-Null
robocopy $PluginSrc $PluginDst /MIR /NFL /NDL /NJH /NJS /NC /NS | Out-Null
Ok "スキル一式を配置: $PluginDst"
robocopy $SeSrc $SeDst /E /NFL /NDL /NJH /NJS /NC /NS | Out-Null
Ok "SE/BGM を配置: $SeDst"

# --- 4. パス書き換え（作者パス → このPC） -----------------------------
Write-Host ""
Write-Host "[4/5] パスをこのパソコン用に調整..."
$exts = @("*.md","*.py","*.ts","*.tsx","*.json","*.txt","*.sh")
foreach ($ext in $exts) {
  Get-ChildItem -Path $PluginDst -Recurse -Filter $ext -File | ForEach-Object {
    $c = Get-Content -Raw -Encoding UTF8 $_.FullName
    if ($c.Contains($Owner)) {
      ($c -replace [regex]::Escape($Owner), $HomePosix) |
        Set-Content -Encoding UTF8 -NoNewline $_.FullName
    }
  }
}
Ok "作者パス($Owner) → このパソコン($HomePosix) に置換"

# スキルをショートカット（ジャンクション）で登録
Get-ChildItem -Path (Join-Path $PluginDst "skills") -Directory | ForEach-Object {
  $link = Join-Path $SkillsDir $_.Name
  if (Test-Path $link) { cmd /c rmdir "$link" 2>$null }
  cmd /c mklink /J "$link" "$($_.FullName)" | Out-Null
}
Ok "コマンド登録: /supermovie ・ /supermovie2 ・ /supermovie3 など"

# --- 5. 動作確認 -----------------------------------------------------
Write-Host ""
Write-Host "[5/5] 動作確認..."
if (Get-Command ffmpeg -ErrorAction SilentlyContinue)  { Ok "ffmpeg OK" }  else { Warn "ffmpeg 未検出（PCを再起動すると認識される場合あり）" }
if (Get-Command node -ErrorAction SilentlyContinue)    { Ok "node OK" }    else { Warn "node 未検出（同上）" }
if (Get-Command python -ErrorAction SilentlyContinue)  { Ok "python OK" }  else { Warn "python 未検出（同上）" }
if (Test-Path (Join-Path $SeDst "_BGM\bgm.mp3"))       { Ok "BGM 配置OK" }  else { Warn "BGM 未検出" }
Write-Host ""
Write-Host "  ※ 文字起こしエンジン(whisper)など残りの部品は、初回の編集実行時に"
Write-Host "     Claude Code / Codex が自動でそろえます（初回のみ数分〜）。"
Write-Host "  ※ もしエラーが出たら、その文章をそのまま Claude Code / Codex に貼って"
Write-Host "     『これを直して』『足りないものを入れて』と頼めば解決できます。"

Write-Host ""
Line
Write-Host "  セットアップ完了！  Claude Code を開いて『/supermovie @動画』で開始できます。"
Line
Read-Host "Enterで閉じます"
