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

export interface NDVIBandArguments 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 SAVIBandArguments 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 TSAVIBandArguments 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 MSAVIBandArguments extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

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

export interface PVIBandArguments 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 LandsatBandArguments extends BaseRasterFunctionParameters {
  /** The bandIds array representing Landsat band 1, 2, 3, 4, 5, 7. */
  bandIds: [
      number,
      number,
      number,
      number,
      number,
      number
  ];
}

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

export interface VARIBandArguments 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 GDNVIBandArguments extends BaseRasterFunctionParameters {
  /** The 0-based green band id. */
  greenBandId: number;
  /** The 0-based near infrared band id. */
  nirBandId: number;
}

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

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

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

export interface MTVI2BandArguments 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 RTVICoreBandArguments 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 CIreBandArguments extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red edge band id. */
  reBandId: number;
}

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

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

export interface EVIBandArguments 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 IronOxideBandArguments extends BaseRasterFunctionParameters {
  /** The 0-based blue band id. */
  blueBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

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

export interface ClayMineralsBandArguments 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 WNDWIBandArguments 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 BAIBandArguments extends BaseRasterFunctionParameters {
  /** The 0-based near infrared band id. */
  nirBandId: number;
  /** The 0-based red band id. */
  redBandId: number;
}

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

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

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

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

export interface MNDWIBandArguments 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;
}