/**
 * deploy.mjs — 依具名目標部署 console-ui 到 Cloudflare Pages
 *
 * 用法：npm run deploy:personal / npm run deploy:enterprise
 *
 * 為什麼不直接用 `wrangler pages deploy`（2026-07-22 leo 立，實際踩到才補）：
 *   **兩個帳號都有名為 arcrun-console-ui 的 Pages 專案**
 *     · leo21c  → arcrun-console-ui.pages.dev（個人版 console）
 *     · uncle6  → 綁 rag-demo.arcrun.dev（企業版 demo 站）
 *   wrangler 若 OAuth 登入在 uncle6，`--project-name arcrun-console-ui` 會部到 demo 站上。
 *   本腳本強制帶目標的 accountId，並在部署前印出目標，避免部錯帳號。
 *
 *   同時把 profile/apiBase 綁進目標（deploy.targets.json），不再靠部署者記得帶環境變數——
 *   帶漏過三次：demo 站漏 profile=rag 顯示成個人版、兩站漏 apiBase 導致登入 405。
 */
import { readFileSync } from 'node:fs';
import { spawnSync } from 'node:child_process';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
const targets = JSON.parse(readFileSync(join(ROOT, 'deploy.targets.json'), 'utf8'));
const names = Object.keys(targets).filter((k) => !k.startsWith('_'));

const name = process.argv[2];
if (!name || !targets[name]) {
  console.error(`用法：npm run deploy:<target>\n可用目標：${names.join(' / ')}`);
  if (name) console.error(`（收到未知目標："${name}"）`);
  process.exit(1);
}
const t = targets[name];

console.log(`\n部署目標：${name}`);
console.log(`  說明    ：${t.description}`);
console.log(`  帳號    ：${t.accountId}`);
console.log(`  專案    ：${t.projectName}`);
console.log(`  profile ：${t.profile}`);
console.log(`  apiBase ：${t.apiBase}\n`);

const env = { ...process.env, DEPLOY_TARGET: name, CLOUDFLARE_ACCOUNT_ID: t.accountId };

const build = spawnSync('node', [join(ROOT, 'scripts', 'build.mjs')], { stdio: 'inherit', env });
if (build.status !== 0) process.exit(build.status ?? 1);

// --commit-dirty：本地部署常有未提交變更，不因此中斷
const deploy = spawnSync(
  'npx',
  ['wrangler', 'pages', 'deploy', 'public', '--project-name', t.projectName, '--commit-dirty=true'],
  { stdio: 'inherit', cwd: ROOT, env },
);
process.exit(deploy.status ?? 1);
