import type { BaseRasterFunctionParameters } from "../types.js";

export interface NDVIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
  /** Output values are linearly scaled to 0 to 200 when scientificOutput is false. Default is true. */
  scientificOutput?: boolean;
}

export interface SAVIBandParameters extends BaseRasterFunctionParameters {
  /** The amount of green vegetation cover from 0 to 1. Default is 0.33. */
  factor?: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface TSAVIBandParameters extends BaseRasterFunctionParameters {
  /** The adjustment factor to minimize soil noise. Default is 1.5. */
  factor?: number;
  /** The soil line intercept. Default is 0.5. */
  intercept?: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
  /** The soil line slope. Default is 0.33. */
  slope?: number;
}

export interface MSAVIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface GEMIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface PVIBandParameters extends BaseRasterFunctionParameters {
  /** The soil line gradient. Default is 0.5. */
  gradient?: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
  /** The soil line slope. Default is 0.3. */
  slope?: number;
}

export interface LandsatBandParameters extends BaseRasterFunctionParameters {
  /** The bandIds array representing Landsat band 1, 2, 3, 4, 5, 7. */
  bandIds: [
      number,
      number,
      number,
      number,
      number,
      number
  ];
}

export interface SultanParameters extends BaseRasterFunctionParameters {
  /** The bandIds array representing band 1, 3, 4, 5, 6. */
  bandIds: [
      number,
      number,
      number,
      number,
      number
  ];
}

export interface VARIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based blue band id. */
  blueBandId: number;
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface GDNVIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
}

export interface SRBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface NDVIreBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red edge band id. */
  reBandId: number;
}

export interface SRreBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red edge band id. */
  reBandId: number;
}

export interface MTVI2BandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface RTVICoreBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red edge band id. */
  reBandId: number;
}

export interface CIreBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red edge band id. */
  reBandId: number;
}

export interface CIgBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
}

export interface NDWIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
}

export interface EVIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based blue band id. */
  blueBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface IronOxideBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based blue band id. */
  blueBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface FerrousMineralsBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface ClayMineralsBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based shortwave infrared band id centering around 1.5—1.75µm. */
  swir1BandId: number;
  /** The 0-based shortwave infrared band id centering around 2.08—2.35µm. */
  swir2BandId: number;
}

export interface WNDWIBandParameters extends BaseRasterFunctionParameters {
  /** A weighted coefficient ranging from 0 to 1. Default is 0.5. */
  alpha?: number;
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface BAIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

export interface NBRBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface NDBIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface NDMIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface NDSIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface MNDWIBandParameters extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based shortwave infrared band id. */
  swirBandId: number;
}

export interface CustomBandParameters extends BaseRasterFunctionParameters {
  /** The custom band index, e.g. (b1 - b0) / (b1 + b0) */
  bandIndexes: string;
}