import { PrintObject } from "./PrintObject";
import { String } from "../dataType/String";
import { Number } from "../dataType/Number";
import { Date} from "../models/Date"
/**
 * @class gve.Filter
 * @since gve
 */
export class Filter extends PrintObject {
  /**
   * Filter
   * @hideconstructor
   * @return gve.Filter
   * @tutorial gve
   */
  constructor() {
    super();
    if (!(this instanceof Filter)) {
      return new Filter();
    }
  }

  /**
   * 按照等于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static eq(name: string, value: any) {
    return new Filter();
  }

  /**
   * 按照小于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static lt(name: string, value: any) {
    return new Filter();
  }

  /**
   * 按照小于等于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static lte(name: string, value: any) {
    return new Filter();
  }

  /**
   * 按照大于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static gt(name: string, value: any) {
    return new Filter();
  }

  /**
   * 按照大于等于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static gte(name: string, value: any) {
    return new Filter();
  }

  /**
   * 按照不等于指定字段的数值的条件过滤
   * @param {string} name 字段名
   * @param {any} value 数值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static neq(name: string, value: any) {
    return new Filter();
  }

  /**
   * 过滤条件逻辑与
   * @param {Filter[]} filter 多个Filter实例
   * @returns Filter
   * @tutorial gve.Filter
   */
  static and(filter: Filter[]) {
    return new Filter();
  }

  /**
   * 过滤条件逻辑或
   * @param {Filter[]} filter 多个Filter实例
   * @returns Filter
   * @tutorial gve.Filter
   */
  static or(filter: Filter[]) {
    return new Filter();
  }

  /**
   * 时间过滤器
   * @param {Date|Number|String} start 开始时间
   * @param {Date|Number|String} [end] 结束时间
   * @returns Filter
   * @tutorial gve.Filter
   */
  static date(start:Date|Number|String, end?:Date|Number|String){
    return new Filter();
  }
  /**
   * 创建一个左边操作数大于右边操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static greaterThan(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  /**
   * 创建一个左边操作数大于或等于右边操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
    static greaterThanOrEquals(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
      return new Filter();
    }
  /**
   * 创建一个左边操作数小于右边操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
    static lessThan(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
      return new Filter();
    }
  /**
   * 创建一个左边操作数小于或等于右边操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static lessThanOrEquals(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  /**
   * 创建一个左边操作数不等于右边操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static notEquals(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  
  /**
   * 过滤器过滤两个操作数是否相等
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static equals(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  /**
   * 创建一个左边字符串操作数包含右边字符串操作数的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static stringContains(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  /**
   * 创建一个左边字符串操作数以右边字符串操作数结尾的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static stringEndsWith(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
  /**
   * 创建一个左边字符串操作数以右边字符串操作数开头的过滤器
   * @param {String} [leftField] 左操作数选择器
   * @param {Any} [rightValue] 右操作数的值
   * @param {String} [rightField] 右操作数选择器
   * @param {Any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static stringStartsWith(leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }

  /**
   * 最大差值过滤
   * @param {number} difference 允许的最大插值
   * @param {string} [leftField] 左操作数选择器
   * @param {any} [rightValue] 右操作数的值
   * @param {string} [rightField] 右操作数选择器
   * @param {any} [leftValue] 左操作数的值
   * @returns Filter
   * @tutorial gve.Filter
   */
  static maxDifference(difference:number, leftField?:string, rightValue?:any, rightField?:string, leftValue?:any){
    return new Filter();
  }
}