import { Component, OnInit } from '@angular/core';
import { IClickLabelsEvent, IDeleteLabelsEvent, ILabel, ILabelingEvent, LabelHub, LabelTextMode, PdfMode } from '@bixi/label';

@Component({
  selector: 'idea-label-text',
  templateUrl: './label-text.component.html'
})
export class IdeaLabelTextComponent implements OnInit {
  labelModes = Object.values(LabelTextMode);
  labelMode = LabelTextMode.textSlip;
  zoom = 1;
  page = 1;
  hub = new LabelHub({
    dev: true,
    logAllEvents: true,
    logUnhandledEvents: false,
    logIgnoreEvents: ['BIXI_PDF_SCROLLING', 'initLabelingWithSeriesIdx', 'labelRendered']
  });
  labels: ILabel[] = [
    {
      index: 8,
      uuid: '1598347587244',
      tagId: '1',
      word: '合作关系',
      fill: 'transparent',
      stroke: 'rgba(21,210,112,1)'
    }
  ];

  tables = [];

  ngOnInit() {
    this.hub.init({
      pdfMode: PdfMode.full,
      labelMode: this.labelMode,
      id: '1',
      pdfUrl: 'http://localhost:4200/assets/pdf/text/f5.pdf',
      pdfInfoUrl: 'http://localhost:4200/assets/pdf/text/f5_info.json',
      pdfCharsUrl: 'http://localhost:4200/assets/pdf/text/json/page_1.json',
      pdfSize: 2000,
      labels: this.labels,
      tables: []
    });
    // this.hub.searchResult$.subscribe((result) => {
    //   console.warn('result', result);
    // });
  }

  resetLabels() {
    this.hub.setLabels(this.labels);
  }

  search() {
    this.hub.search({
      keyword: '合',
      caseSensitive: false
    });
  }

  onStartLabeling(event: ILabelingEvent) {
    console.warn('startLabels', event);
  }

  onDeleteLabels(event: IDeleteLabelsEvent) {
    if (!event.data.length) return;
    console.warn('deleteLabels', event);
    // this.labels = this.labels.filter();
    this.labels = this.labels.filter(a => event.data.find(b => b.uuid !== a.uuid));
    this.hub.setLabels(this.labels);
  }

  onClickLabels(event: IClickLabelsEvent) {
    console.warn('onClickLabels', event);
  }

  zoom1() {
    this.zoom = this.zoom + 0.1;
    this.hub.setZoom(this.zoom);
  }
  zoom2() {
    this.zoom = this.zoom - 0.1;
    this.hub.setZoom(this.zoom);
  }
  page1() {
    this.page = this.page + 1;
    this.hub.setPagination({
      pageNumber: this.page
    });
  }
  page2() {
    this.page = this.page - 1;
    this.hub.setPagination({
      pageNumber: this.page
    });
  }

  onLabelModeChange(mode: LabelTextMode) {
    this.hub.setLabelMode(mode);
  }

  getSelectedLabels() {
    console.warn('getSelectedLabels', this.hub.getSelectedLabels());
  }
}
