/* @vitest-environment jsdom */

import { render, screen } from '@testing-library/react';
import { expect, test } from 'vitest';

import type { CustomWorldWorkSummary } from '../../../packages/shared/src/contracts/customWorldAgent';
import { CustomWorldCreationHub } from './CustomWorldCreationHub';

const noopCreateType = () => {};

const baseDraftItem: CustomWorldWorkSummary = {
  workId: 'draft:session-1',
  sourceType: 'agent_session',
  status: 'draft',
  title: '潮雾列岛',
  subtitle: '补齐关键锚点',
  summary: '玩家是失职返乡的守灯人。',
  coverImageSrc: null,
  updatedAt: new Date('2026-04-14T10:00:00.000Z').toISOString(),
  publishedAt: null,
  stage: 'object_refining',
  stageLabel: '待完善草稿',
  playableNpcCount: 3,
  landmarkCount: 4,
  sessionId: 'session-1',
  profileId: null,
  canResume: true,
  canEnterWorld: false,
};

test('creation hub reflects updated draft title summary and counts after rerender', () => {
  const { rerender } = render(
    <CustomWorldCreationHub
      items={[baseDraftItem]}
      loading={false}
      error={null}
      onRetry={() => {}}
      onCreateType={noopCreateType}
      onOpenDraft={() => {}}
      onEnterPublished={() => {}}
    />,
  );

  expect(screen.getByText('潮雾列岛')).toBeTruthy();
  expect(screen.getByText('玩家是失职返乡的守灯人。')).toBeTruthy();
  expect(screen.getByText('角色 3')).toBeTruthy();
  expect(screen.getByText('地点 4')).toBeTruthy();
  expect(screen.getByRole('button', { name: /角色扮演 RPG/u })).toBeTruthy();
  expect(screen.getByRole('button', { name: /大鱼吃小鱼/u })).toBeTruthy();
  expect(screen.getByRole('button', { name: /拼图玩法/u })).toBeTruthy();

  rerender(
    <CustomWorldCreationHub
      items={[
        {
          ...baseDraftItem,
          title: '潮雾列岛·回潮版',
          summary: '世界总卡和角色网已经继续长出了新的支线。',
          playableNpcCount: 5,
          landmarkCount: 6,
          updatedAt: new Date('2026-04-14T10:10:00.000Z').toISOString(),
        },
      ]}
      loading={false}
      error={null}
      onRetry={() => {}}
      onCreateType={noopCreateType}
      onOpenDraft={() => {}}
      onEnterPublished={() => {}}
    />,
  );

  expect(screen.getByText('潮雾列岛·回潮版')).toBeTruthy();
  expect(screen.getByText('世界总卡和角色网已经继续长出了新的支线。')).toBeTruthy();
  expect(screen.getByText('角色 5')).toBeTruthy();
  expect(screen.getByText('地点 6')).toBeTruthy();
});

test('creation hub mixes puzzle works into the same grid and uses puzzle tag to distinguish', () => {
  render(
    <CustomWorldCreationHub
      items={[baseDraftItem]}
      puzzleItems={[
        {
          workId: 'puzzle:work-1',
          profileId: 'puzzle-profile-1',
          ownerUserId: 'user-1',
          authorDisplayName: '拼图作者',
          levelName: '沉钟拼图',
          summary: '拼图作品会与其他创作作品一起展示。',
          themeTags: ['潮雾', '沉钟'],
          coverImageSrc: null,
          publicationStatus: 'published',
          updatedAt: new Date('2026-04-22T12:00:00.000Z').toISOString(),
          publishedAt: new Date('2026-04-22T12:10:00.000Z').toISOString(),
          playCount: 8,
          publishReady: true,
        },
      ]}
      loading={false}
      error={null}
      onRetry={() => {}}
      onCreateType={noopCreateType}
      onOpenDraft={() => {}}
      onEnterPublished={() => {}}
      onOpenPuzzleDetail={() => {}}
    />,
  );

  expect(screen.getByText('潮雾列岛')).toBeTruthy();
  expect(screen.getByText('沉钟拼图')).toBeTruthy();
  expect(screen.getAllByText('拼图').length).toBeGreaterThan(0);
  expect(screen.queryByText('我的拼图作品')).toBeNull();
});
