import type { SerialTaskExecuteContext } from '../handler'
import type { SsmlConfig } from '../types'
import type { SsmlConverter } from '../utils'
import { SerialHandler } from '../handler'
import { createSsmlConverter } from '../utils'

class CreateSsml extends SerialHandler<string, string> {
  private ssmlConverter!: SsmlConverter

  /**
   * 初始化属性
   * @param ssmlConfig SSML 配置（包含发音规则）
   */
  public initProperty(ssmlConfig: SsmlConfig): void {
    this.ssmlConverter = createSsmlConverter(ssmlConfig.pronunciationRules ?? [])
  }

  /**
   * 执行处理，将当前文本转换为 SSML 并传递到下一个处理器
   * @param context 串行任务上下文
   */
  public execute(
    context: SerialTaskExecuteContext<string, string>,
  ): void {
    if (context.isLastExecute) {
      this.taskCompletedCallback()
    }
    else {
      this.ssmlConverter.convertParagraphs([context.taskItem.original!]).forEach((paragraph) => {
        this.forwardToHandler(paragraph)
      })
      this.taskCompletedCallback()
    }
  }

  /**
   * 完成回调，广播文本切割结束事件
   */
  protected onFinish(): void {
    this.executeController?.$bus.emit('_createSsmlFinish')
  }
}

export default CreateSsml
