/**
 * Generic Fallback Stream Parser
 *
 * For providers without a dedicated parser. Treats each line as text output.
 * Accumulates all output and emits a final result event on stream end.
 */

import type { StreamEvent, StreamParser } from '../stream-types.js';

export class GenericStreamParser implements StreamParser {
  readonly provider = 'generic';
  private accumulated: string[] = [];

  parseLine(line: string): StreamEvent[] {
    if (!line) return [];

    this.accumulated.push(line);

    // Emit each line as a text delta
    return [{ type: 'text_delta', text: line + '\n' }];
  }

  end(): StreamEvent[] {
    // Emit the accumulated output as the result
    const fullText = this.accumulated.join('\n');
    this.accumulated = [];

    if (!fullText) return [];

    return [{ type: 'result', text: fullText }];
  }
}
