/**
 * シード（`scripts/seed-local-db.ts`）が `dwatch_local` 以外に書き込むことを
 * 構造的に防ぐガード（指示書M 段階2-4）。
 *
 * ★参照用アカウントはSELECTのみなので実際には書き込みに失敗するが、
 *   「失敗に頼らない」ためにコードでも止める★
 * ★呼び出し側はエラーメッセージに DATABASE_URL の値を出さないこと★
 *   （CLAUDE.md §9.3。パスワードがログに残るため、この関数自身も受け取った url を返さない）
 */
export function isLocalDwatchDatabaseUrl(url: string): boolean {
  let parsed: URL;
  try {
    parsed = new URL(url);
  } catch {
    return false;
  }
  const isLocalHost = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1";
  const databaseName = parsed.pathname.replace(/^\//, "");
  return isLocalHost && databaseName === "dwatch_local";
}

/** ローカル `dwatch_local` を指していなければ例外を投げる */
export function assertLocalDwatchDatabaseUrl(url: string): void {
  if (!isLocalDwatchDatabaseUrl(url)) {
    throw new Error(
      "[seed-local-db] DATABASE_URL がローカルの dwatch_local を指していません。" +
        "書き込み先を間違えている可能性があるため中断しました。" +
        "環境変数 DATABASE_URL（.env.local など）を確認してください（値はこのエラーには出しません）。"
    );
  }
}
