import { Http } from "../Http";
import { ColorMap } from "./ColorMap";

const colormap = require("/assets/geePalette.json");
const _ = require("lodash");

/**
 * @memberof gve
 * @class gve.Palette
 * @since gve
 */
export class Palette {
  paletteName: string = "GVEEPalette";
  band_rendering: any = {
    gray: {
      min: "",
      max: "",
      color_gradient: "",
      reverse: false, //reverse为false的时候代表从黑到白  为true的时候代表从白到黑
    },
    pseudocolor: {
      min: "",
      max: "",
      // 种类1
      interpolation: "",
      colormap: "", //      ....     //Editor 修改内容
      // 种类2
      intervals: "",
    },
  };
  color_rendering: any;

  /**
   * 图例颜色的构造方法,构造一个新的图例实例。
   * @hideconstructor
   * @param {Object} [options] 图例颜色对象
   * @return Geometry.Palette
   */
  constructor(options?: any) {
    if (!(this instanceof Palette)) {
      return new Palette(options);
    }
    this.band_rendering = {
      gray: {
        min: "",
        max: "",
        color_gradient: "",
        reverse: false, //reverse为false的时候代表从黑到白  为true的时候代表从白到黑
      },
      pseudocolor: {
        min: "",
        max: "",
        // 种类1
        interpolation: "",
        colormap: "", //      ....     //Editor 修改内容
        // 种类2
        intervals: "",
      },
      uniquevalue: {
        colortable: {
          values: [],
          colors: [],
          na: ""  // 可选,没有不要传递此值,不要传递空值           
        }
      }
    };
    if (options && options.pseudocolor) {
      this.band_rendering = {
        pseudocolor: _.assign(
          {
            min: "",
            max: "",
            // 种类1
            interpolation: "",
            colormap: "", //      ....     //Editor 修改内容
            // 种类2
            intervals: "",
          },
          options
        ),
      };
    }
    this.color_rendering = {
      blending: "",
      brightness: "",
      gamma: "",
    };
    return this;
  }

  /**
   * 获取图例主题列表
   * @returns Array<String>
   */
  getPaletteThemes() {
    console.log("colormapppppppp: ", colormap)
    return Object.keys(colormap);
  }
  /**
   * 返回获取给定主题的可用调色板名称的数组
   * @param {String} theme 给定的主题条件
   * @returns Array<String>
   */

  getPaletteNames(theme: string) {
    return Object.keys(colormap[theme]);
  }

  /**
   * 指定主题指定名称的图例对应索引
   * @param {String} theme 主题的名称
   * @param {String} name 调色板名称
   * @returns Object
   */
  getPaletteNumbers(theme: string, name: string) {
    return Object.keys(colormap[theme][name]);
  }
  /**
   * 获取指定调色板名称和主题的颜色列表
   * @param {String} theme 主题的名称
   * @param {String} name 调色板名称
   * @param {String|Number} number 颜色的索引
   * @param {String} format 返回的格式分别为string和array两种,默认为string
   * @returns Array<String>|String
   */
  getPalette(
    theme: string,
    name: string,
    number: string | number,
    format?: string
  ) {
    if (!(theme && name && number)) {
      return [];
    }
    if (typeof (number) == 'number') {
      number = number.toString();
    }
    if (format && format.match(/array/i)) {
      return colormap[theme][name][number];
    }
    return colormap[theme][name][number];
  }

  /**
   * 用给定的名称和调色板创建一个新的ColorMap对象
   * @param {String} name - 颜色映射的名称
   * @param {Palette} platte - -配色图的调色板
   * @returns {Promise<ColorMap>} ColorMap
   */

  async createColormap(name: string, platte: Palette) {
    let data = await Http.getRequest_expressions();
    Http.responseSubject$.next(data);
    console.log("create color map", data);
    //可能是请求中止
    if (!data) {
      return;
    }
    let colormap = new ColorMap();
    return colormap;
  }

  getColorMap() {
    return colormap;
  }
}