import { MockProvider } from '@/modules/ai/llm/mock.provider';
import { AiAsnDraftSchema } from '@wms/shared';

describe('MockProvider (test double contract)', () => {
  const p = new MockProvider();

  it('returns a valid ASN draft JSON for document intake prompts', async () => {
    const res = await p.complete({ system: 'Extract a supplier delivery (ASN / purchase order) ...', messages: [{ role: 'user', content: 'Document text:\nPO-1\nWIDGET-1 x 10 CS\nGADGET 5 EA' }], json: true });
    const parsed = AiAsnDraftSchema.safeParse(JSON.parse(res.text));
    expect(parsed.success).toBe(true);
    expect(parsed.success && parsed.data.lines).toHaveLength(2);
    expect(res.usage.outputTokens).toBeGreaterThan(0);
  });

  it('drives one tool round for the copilot and then answers', async () => {
    const first = await p.complete({ system: 'copilot', messages: [{ role: 'user', content: 'open orders?' }], tools: [{ name: 'find_orders', description: '', inputSchema: {} }] });
    expect(first.stopReason).toBe('tool_use');
    expect(first.toolCalls[0].name).toBe('find_orders');
    const second = await p.complete({ system: 'copilot', messages: [{ role: 'user', content: [{ type: 'tool_result', toolUseId: 'x', content: '{"items":[]}' }] }], tools: [{ name: 'find_orders', description: '', inputSchema: {} }] });
    expect(second.stopReason).toBe('end');
    expect(second.text).toContain('Mock answer');
  });
});
