import { Widget } from "./Widget";
import { Http } from "../Http";
import { PrintObject } from "../models/PrintObject";
import { AstHelper } from "@gvol-org/geovis-brain-core";
/**
 * @class ui.Img
 * @since ui
 */
export class Img extends Widget {
  url: string;
  /**
   * @hideconstructor
  * @param {string|object} [url] 图片url
  * @param {object} [style] 样式
   * @return ui.Img
   */
  constructor(
    url: string | object,
    style?: object
  ) {

    let div = document.createElement('div');
    super(div, style);
    if (!(this instanceof Img)) {
      return new Img(url, style);
    }

    if (url instanceof PrintObject) {
      if(url["order"]){
        url['chain'] = AstHelper.relativeChain(url["order"]);
      }
      let loading = this.getLoading();
      div.appendChild(loading);
      // let codeContent = "print(" + url['expressions'] + ");";
      // this.execute(() => Http.getPrintRequest(codeContent).then(response => {
      this.execute(() => Http.getPrintRequest(url["chain"]).then(response => {
        console.log("img参数", response);
        Http.responseSubject$.next(null);
        let img = document.createElement("img");
        img.title = "双击图片可以放大显示";
        img.style.width = '100%';
        img.style.height = '100%';
        if (response && response.data.status == 'success') {
          let res = response.data.detail;
          if (res) {
            if (res.data) {
              img.src = res.data.indexOf('data:') > -1 ? res.data : "data:image/png;base64," + res.data;
            }
            else {
              img.src = res.url;
            }
            this.url = img.src;
          }
        }
        div.removeChild(loading);
        div.appendChild(img);
      }));
    } else {
      let img = document.createElement("img");
      img.title = "双击图片可以放大显示";
      img.style.width = '100%';
      img.style.height = '100%';
      img.src = url as string;
      this.url = img.src;
      div.appendChild(img);
    }
  }
  /**
   * 返回图片地址
   * @return {string} String
   */
  getUrl() {
    return this.url;
  }



  /**
   * 设置图片地址
   * @param {string} url 图片地址
   * @return  ui.Img
   */
  setUrl(url: string) {
    this.url = url;
    return this;
  }

  getType(): string {
    return 'Img';
  }

}