import { Component } from '@angular/core';
import { GenuiRenderer } from '@opentiny/genui-sdk-angular';

const content = JSON.stringify({
  componentName: 'Page',
  children: [
    {
      componentName: 'Text',
      props: {
        text: '生成式 UI(Generative UI)是一种创新的交互方式,它能够将大语言模型(LLM)的结构化输出实时渲染为可交互的用户界面。与传统的文本对话不同,生成式 UI 让 AI 能够直接生成表单、按钮、图表等 UI 组件,用户可以通过这些组件与 AI 进行更直观、更高效的交互。',
      },
    },
    {
      componentName: 'div',
      props: {
        style: 'padding: 20px; max-width: 500px;',
      },
      children: '支持传入自定义组件和组件描述,增强生成式UI能力,丰富生成界面。支持自定义交互行为,例如跳转新网页、下载附件等操作。'
    }
  ],
});

@Component({
  imports: [GenuiRenderer],
  template: `
    <button (click)="startStream()">开始渲染</button>
    <div class="container">
      <div>
        <div>默认缓冲字段</div>
        <GenuiRenderer :content="streamContent" :generating="generating"/>
      </div>
      <div>
        <div>自定义缓冲字段: 拦截文本内容</div>
        <GenuiRenderer :content="streamContent" :generating="generating" :requiredCompleteFieldSelectors="requiredCompleteFieldSelectors" />
      </div>
    </div>
  `,
  styles: [
    `
      button {
        padding: 8px 16px;
        background: #1890ff;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
      }
      .container { 
        display: flex;
        flex-direction: row;
        gap: 10px;
        justify-content: space-between;
      }
      .container > div {
        width: 50%;
      }
    `
  ]
})
export class GenuiExample {
  generating = false;
  requiredCompleteFieldSelectors = [
    '[componentName=Text] > props > text',
  ];
  streamContent = '';

  splitContentAndAssignToStream = (content: string) => {
    this.streamContent = '';
    const fragments = content.match(/.{1,10}/g);
    fragments?.forEach((fragment, index) => {
      setTimeout(() => {
        this.streamContent += fragment;
      }, index * 20);
    });
  };

  startStream() {
    this.splitContentAndAssignToStream(content)
  }
}