import { Image } from "../Image";
import { ImageCollection } from "../ImageCollection";
import { Boolean } from "../../dataType/Boolean";
import { String } from "../../dataType/String";
import { Number } from "../../dataType/Number";
import { PrintObject } from "../PrintObject";
import { File } from "../File";
import { FeatureCollection } from "../FeatureCollection";
import { Dictionary } from "../Dictionary";

/**
 * Services
 * @class Services.AI
 * @since gve.Services
 * @alias gve.Services.AI
 */
export class AI {

  /**
   * 提取采样区域的桥梁, 返回geojson文件路径
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Bridge
   */
  static Object_Detection_Bridge(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 获取建筑物变化的geojson文件路径
   * @param {Image} image1 image实例
   * @param {Image} image2 image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.BuildingChange
   */
  static BuildingChange(image1: Image, image2: Image) {
    return new FeatureCollection();
  }

  /**
   * 获取建筑物的geojson文件路径
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.buildingExtraction
   */
  static buildingExtraction(image: Image, asyncFlag?: boolean, batch?: number) {
    return new FeatureCollection();
  }

  /**
   * 获取建筑画风格影像
   * @param {Image} image image实例
   * @returns Image
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.PapercutGeneration
   */
  static PapercutGeneration(image: Image) {
    return new Image();
  }

  /**
   * 获取目标检测的geojson文件路径
   * @param {Image} image image实例
   * @param {string} type 目标可选值 'large-vehicle'l,'plane','ship','storage-tank'
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection
   */
  static Object_Detection(image: Image, type: string) {
    return new FeatureCollection();
  }

  /**
   * 获取水体的geojson文件路径
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.waterExtraction
   */
  static waterExtraction(image: Image | ImageCollection) {
    return new FeatureCollection();
  }

  /**
   * 提取采样区域的港口, 返回geojson文件路径
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Harbor
   */
  static Object_Detection_Harbor(image: Image) {
    return new FeatureCollection();
  }

  /**
   * tif格式剔除敏感物
   * @param {Image} image Image实例
   * @param {number[]} points 敏感物坐标
   * @returns Image
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RingMo_ImageRemoveSensitive
   */
  static RingMo_ImageRemoveSensitive(image: Image, points: number[]) {
    return new Image();
  }

  /**
   * File剔除敏感物
   * @param {File} file File实例
   * @param {number[]} points 敏感物坐标
   * @returns File
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RingMo_FileRemoveSensitive
   */
  static RingMo_FileRemoveSensitive(file: File, points: number[]) {
    return new File();
  }
  /**
   * 自动剔除敏感物
   * @param {Image} image image实例
   * @returns Image
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RingMo_Infer_ImageRemoveSensitive
   */
  static RingMo_Infer_ImageRemoveSensitive(image: Image) {
    return new Image();
  }
  /**
   * 自动剔除敏感物
   * @param {Image} image image实例
   * @returns File
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RingMo_Infer_FileRemoveSensitive
   */
  static RingMo_Infer_FileRemoveSensitive(image: Image) {
    return new File();
  }

  /**
   * 太阳能板提取
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.solarExtraction
   */
  static solarExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 滑坡检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Landslide
   */
  static Object_Detection_Landslide(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 石油检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Oil
   */
  static Object_Detection_Oil(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 地块提取
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.plotExtraction
   */
  static plotExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 获取道路的geojson文件路径
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.roadExtraction
   */
  static roadExtraction(image: Image | ImageCollection) {
    return new FeatureCollection();
  }

  /**
   * 大棚提取
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.greenhouseExtraction
   */
  static greenhouseExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 建筑物高度估计
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.buildingHeightEstimation
   */
  static buildingHeightEstimation(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 尾矿池检测
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Tailings_Pond
   */
  static Object_Detection_Tailings_Pond(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 风机检测函数
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Wind_Turbine
   */
  static Object_Detection_Wind_Turbine(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 过火区域识别
   * @param {Image|ImageCollection} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.burnedAreaExtraction
   */
  static burnedAreaExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 飞机检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Plane
   */
  static Object_Detection_Plane(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 船只检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_Ship
   */
  static Object_Detection_Ship(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 飞机去除
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Removal_Plane
   */
  static Object_Removal_Plane(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 机车去除
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Removal_Vehicle
   */
  static Object_Removal_Vehicle(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 船只去除
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Removal_Ship
   */
  static Object_Removal_Ship(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 储罐检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.Object_Detection_StorageTank
   */
  static Object_Detection_StorageTank(image: Image) {
    return new FeatureCollection();
  }
  /**
   * 全要素变化检测
   * @param {Image} image1 image实例
   * @param {Image} image2 image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.TotalFactorChangeExtraction
   */
  static TotalFactorChangeExtraction(image1: Image, image2: Image) {
    return new FeatureCollection();
  }

  /**
   * 建设用地变化检测
   * @param {Image} image1 image实例
   * @param {Image} image2 image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.ConstructionLandChangeExtraction
   */
  static ConstructionLandChangeExtraction(image1: Image, image2: Image) {
    return new FeatureCollection();
  }

  /**
   * 森林检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.ForestExtraction
   */
  static ForestExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 林地提取
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.WoodsExtraction
   */
  static WoodsExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 光伏选址
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.PhotovoltaicLocationDetection
   */
  static PhotovoltaicLocationDetection(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 小目标检测
   * @param {Image} image image实例
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.SmallObjectDetection
   */
  static SmallObjectDetection(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 模型的加载
   * @param {string} name 模型名称
   * @param {string} description 描述信息
   * @param {string} project_id 项目ID
   * @param {string} version 版本号
   * @param {string} checkpoint 检查点(模型训练过程中保存的模型状态)
   * @returns Dictionary
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.modelLoad
   */
  static modelLoad(name: string, description: string, project_id: string, version: string, checkpoint: string) {
    return new Dictionary();
  }

  /**
   * 模型的推理
   * @param {Image} image 影像
   * @param {Dictionary} model 模型相关信息
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.modelReason
   */
  static modelReason(image: Image, model: Dictionary) {
    return new FeatureCollection();
  }

  /**
   * 地块提取-玉米
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.cornExtraction
   */
  static cornExtraction(image: Image) {
    return new FeatureCollection();
  }

  /**
   * 道路变化检测
   * @param {Image} image1  影像
   * @param {Image} image2  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RoadChange
   */
  static RoadChange(image1:Image, image2:Image){
    return new FeatureCollection();
  }
  /**
   * 路网提取
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.RoadCenterlineExtraction
   */
  static RoadCenterlineExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 施工器械检测
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.EquipmentDetection
   */
  static EquipmentDetection(image:Image){
    return new FeatureCollection();
  }

  /**
   * 水体变化检测
   * @param {Image} image1 影像
   * @param {Image} image2 影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.WaterChangeDetection
   */
  static WaterChangeDetection(image1:Image,image2:Image){
    return new FeatureCollection();
  }
  /**
   * 林地变化检测
   * @param {Image} image1 影像
   * @param {Image} image2 影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.ForestChangeDetection
   */
  static ForestChangeDetection(image1:Image,image2:Image){
    return new FeatureCollection();
  }
  /**
   * 耕地提取
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.agricultureExtraction
   */
  static agricultureExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 施工场地提取
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.constructionExtraction
   */
  static constructionExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 防尘网提取
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.dustproofExtraction
   */
  static dustproofExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 地块提取(大地量子)
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.dikuaiExtraction
   */
  static dikuaiExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 作物提取(大地量子)
   * @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.cropExtraction
   */
  static cropExtraction(image:Image){
    return new FeatureCollection();
  }
  /**
   * 车辆检测
   *  @param {Image} image  影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.vehicleDetection
   */
  static vehicleDetection(image:Image){
    return new FeatureCollection();
  }
  /**
   * 小目标检测
   * @param {Image} image 影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.detectionSmallObject
   */
  static detectionSmallObject(image:Image){
    return new FeatureCollection();
  }

  /**
   * 大雾去除算法
   * @param {Image} image 影像
   * @returns FeatureCollection
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.removeDefogging
   */
  static removeDefogging(image:Image){
    return new FeatureCollection();
  }

  /**
   * 通用变化检测
   * @param {Image} image1 影像
   * @param {Image} image2 影像
   * @returns Image
   * @tutorial gve.Services.AI
   * @alias gve.Services.AI.BaseChangeDetection
   */
  static BaseChangeDetection(image1:Image,image2:Image){
    return new Image();
  }
}