export function createLLMMock(options: LLMMockOptions = {}) {
  const { shouldFail = false, delayMs = 0, response } = options;

  return {
    name: 'mock-llm' as const,
    vendor: 'mock' as const,
    mode: 'mock' as const,
    invoke: vi.fn().mockImplementation(async (input: string) => {
      if (delayMs > 0) {
        await new Promise((resolve) => setTimeout(resolve, delayMs));
      }
      if (shouldFail) {
        throw new Error('Mock LLM failure');
      }
      return {
        content: response || JSON.stringify({
          title: '测试书籍标题',
          outline: [
            { chapter: 1, title: '第一章', summary: '章节摘要' }
          ]
        })
      };
    }),
    stream: vi.fn().mockImplementation(async function* (input: string) {
      if (delayMs > 0) {
        await new Promise((resolve) => setTimeout(resolve, delayMs));
      }
      if (shouldFail) {
        throw new Error('Mock LLM failure');
      }
      yield { content: '模拟流式输出' };
    }),
    generate: vi.fn().mockImplementation(async (prompt: string) => {
      if (shouldFail) {
        throw new Error('Mock LLM failure');
      }
      return response || 'Mock response';
    }),
  };
}

export interface LLMMockOptions {
  shouldFail?: boolean;
  delayMs?: number;
  response?: string;
}

export const defaultLLMResponse = {
  title: 'AI发展史',
  outline: [
    { chapter: 1, title: '第一章：起源', summary: '讲述AI的起源' },
    { chapter: 2, title: '第二章：发展', summary: '讲述AI的发展' },
  ]
};