const STAGE_DIRECTION_KEYWORDS =
  /起身|站起|坐下|目光|视线|扫过|环视|看向|盯着|注视|全场|语气|语速|声音|低声|沉声|缓缓|平静|低沉|停顿|顿了顿|微笑|皱眉|叹气|摊手|点头|摇头|神情|表情|姿态|动作|旁白|清了清嗓|冷笑|抬头|低头|转身|认真|温和|坚定|自然|克制|慢慢/;

export function stripSpeechStageDirections(text: string): string {
  return text
    .replace(/^\s*(?:动作|神态|语气|旁白|舞台说明)\s*[:：][^。！？!?]{0,120}[。！？!?]?\s*/g, "")
    .replace(/^\s*(?:平静|低沉|沉声|低声|缓缓|语气平静|语速不快|声音低沉)(?:[，,、]\s*(?:平静|低沉|沉声|低声|缓缓|语气平静|语速不快|声音低沉))*\s*[:：，,。]?\s*/g, "")
    .replace(/^\s*[（(【\[][^\n）)】\]]{0,120}$/g, "")
    .replace(/^\s*(?:[（(【\[][^\n）)】\]]{0,120}[）)】\]]\s*)+/g, "")
    .replace(/[（(【\[]([^\n（）()【】\[\]]{0,120})[）)】\]]/g, (match, inner: string) =>
      STAGE_DIRECTION_KEYWORDS.test(inner) ? "" : match,
    )
    .replace(/\s{2,}/g, " ")
    .trim();
}
