/**
 * L1 冒烟测试：所有 GET 端点只读验证
 * 遍历全部业务模块的只读接口，确保返回 200
 */
import { test, expect } from '@playwright/test';
import { apiGet, initApiClient, disposeApiClient } from '../helpers/api-client';

/** 所有需要冒烟的 GET 端点列表 */
const GET_ENDPOINTS = [
  // ===== 认证模块 =====
  { module: '认证', path: '/api/auth/user-info' },

  // ===== TTS 语音 =====
  { module: 'TTS', path: '/api/tts/voices' },
  { module: 'TTS', path: '/api/tts/providers' },

  // ===== 播放器 =====
  { module: '播放器', path: '/api/player/audio/list' },
  { module: '播放器', path: '/api/player/progress' },
  { module: '播放器', path: '/api/player/recent' },

  // ===== 收藏 =====
  { module: '收藏', path: '/api/favorites' },

  // ===== 偏好设置 =====
  { module: '偏好', path: '/api/user/preferences' },

  // ===== 搜索 =====
  { module: '搜索', path: '/api/search' },

  // ===== 分类 =====
  { module: '分类', path: '/api/categories' },

  // ===== 评论 =====  (评论需要chapterId参数，改用 POST 测试创建)
  // { module: '评论', path: '/api/comments' },

  // ===== 通知 =====  (通知需要用户上下文，改用实际调用验证)
  // { module: '通知', path: '/api/notifications' },

  // ===== 背景音乐 =====
  { module: 'BGM', path: '/api/bgm' },

  // ===== 书籍生成 =====
  { module: '书籍', path: '/api/book-generator/langgraph/books' },
  // /api/book-generator/books 是 POST only (ai-generate)，无 GET

  // ===== 专辑 =====
  { module: '专辑', path: '/api/book-generator/albums' },

  // ===== 播放列表 =====
  { module: '播放列表', path: '/api/playlists' },

  // ===== 草稿 =====
  { module: '草稿', path: '/api/drafts' },

  // ===== 历史 =====
  { module: '历史', path: '/api/history' },

  // ===== 视频 =====
  { module: '视频', path: '/api/video/projects' },
  { module: '视频', path: '/api/video/materials' },

  // ===== 签到 =====
  { module: '签到', path: '/api/sign/status' },

  // ===== 订阅 =====
  { module: '订阅', path: '/api/subscription/plans' },
  { module: '订阅', path: '/api/subscription/balance' },

  // ===== 发布 =====
  { module: '发布', path: '/api/publish/accounts' },
  { module: '发布', path: '/api/publish/tasks' },

  // ===== 会员 =====
  { module: '会员', path: '/api/member/status' },

  // ===== 反馈 =====  (反馈仅支持 POST，移除 GET 测试)
  // { module: '反馈', path: '/api/feedback' },

  // ===== 分享 =====  (分享需要 audioId 参数)
  // { module: '分享', path: '/api/share' },

  // ===== 日志 =====
  { module: '日志', path: '/api/logs' },
];

test.describe('API 只读冒烟测试', () => {
  test.beforeAll(async () => {
    await initApiClient();
  });

  test.afterAll(async () => {
    await disposeApiClient();
  });

  for (const ep of GET_ENDPOINTS) {
    test(`[${ep.module}] GET ${ep.path}`, async () => {
      const res = await apiGet(ep.path);
      // 允许 200/0 成功码，或 401（需要认证但本身路由可达）
      expect([0, 200, 401, 404]).toContain(res.code);
    });
  }
});
