import { describe, it, expect, afterEach } from 'vitest';
import Database from 'better-sqlite3';
import { mkdtempSync, rmSync } from 'fs';
import { join } from 'path';
import { tmpdir } from 'os';
import { runMigrations } from './migrate.js';

/**
 * 用語統一: 自動生成の個人スペースタイトル「個人スペース」→「個人ワークスペース」。
 * REPLACE が冪等で、案件スペースやユーザー命名は触らないことを確認する。
 */
describe('migrateRenamePersonalSpaceTitle', () => {
  let dir: string;
  afterEach(() => { if (dir) rmSync(dir, { recursive: true, force: true }); });

  function freshDb(): Database.Database {
    dir = mkdtempSync(join(tmpdir(), 'rename-title-'));
    const db = new Database(join(dir, 't.db'));
    runMigrations(db); // creates spaces table
    return db;
  }

  it('renames default + suffixed personal titles, leaves case spaces + idempotent', () => {
    const db = freshDb();
    db.prepare(
      `INSERT INTO spaces (id, kind, title, description, owner_id, visibility, status)
       VALUES (?,?,?,?,?,?,?)`,
    ).run('p1', 'personal', '個人スペース', '', 'u1', 'private', 'open');
    db.prepare(
      `INSERT INTO spaces (id, kind, title, description, owner_id, visibility, status)
       VALUES (?,?,?,?,?,?,?)`,
    ).run('p2', 'personal', 'Alice の個人スペース', '', 'u2', 'private', 'open');
    db.prepare(
      `INSERT INTO spaces (id, kind, title, description, owner_id, visibility, status)
       VALUES (?,?,?,?,?,?,?)`,
    ).run('c1', 'case', '案件スペース', '', 'u1', 'private', 'open');

    runMigrations(db); // re-run triggers the rename pass over the rows just inserted

    const title = (id: string) =>
      (db.prepare('SELECT title FROM spaces WHERE id=?').get(id) as { title: string }).title;
    expect(title('p1')).toBe('個人ワークスペース');
    expect(title('p2')).toBe('Alice の個人ワークスペース');
    expect(title('c1')).toBe('案件スペース'); // case space untouched

    // idempotent: another run leaves them as-is (no double "ワークワークスペース")
    runMigrations(db);
    expect(title('p1')).toBe('個人ワークスペース');
    expect(title('p2')).toBe('Alice の個人ワークスペース');
    db.close();
  });
});
