import { vtkObject } from '@kitware/vtk.js/interfaces' ;

/**
 *
 */
interface IStringArrayInitialValues {
	name?: string;
	numberOfComponents?: number;
	size: number;
	dataType?: string;
}

export interface vtkStringArray extends vtkObject {
	
	/**
	 * Get the data component at the location specified by tupleIdx and compIdx.
	 * @param {Number} tupleIdx 
	 * @param {Number} [compIdx] 
	 */
	getComponent(tupleIdx: number, compIdx?: number): void;

	/**
	 * 
	 */
	getData(): string[];

	/**
	 * 
	 */
	getDataType(): string;

	/**
	 * 
	 */
	getName(): string;

	/**
	 * 
	 */
	getNumberOfComponents(): number;

	/**
	 * 
	 */
	getNumberOfValues(): number;

	/**
	 * 
	 */
	getNumberOfTuples(): number;

	/**
	 * 
	 * @param {Number} idx 
	 * @param {String[]} [tupleToFill] 
	 */
	getTuple(idx: number, tupleToFill?: string[]): string[];

	/**
	 * 
	 * @param {Number} [idx] 
	 */
	getTupleLocation(idx?: number): number;

	/**
	 * 
	 */
	newClone(): void;

	/**
	 * Set the data component at the location specified by tupleIdx and compIdx
	 * to value.
	 * Note that i is less than NumberOfTuples and j is less than
	 *  NumberOfComponents. Make sure enough memory has been allocated
	 * (use SetNumberOfTuples() and SetNumberOfComponents()).
	 * @param {Number} tupleIdx 
	 * @param {Number} compIdx 
	 * @param {String} value 
	 */
	setComponent(tupleIdx: number, compIdx: number, value: string): void;

	/**
	 * 
	 * @param {String[]} array 
	 * @param {Number} numberOfComponents 
	 */
	setData(array: string[], numberOfComponents: number): void;

	/**
	 * 
	 */
	setName(name: string): boolean;
}

/**
 * Method used to decorate a given object (publicAPI+model) with vtkStringArray characteristics.
 *
 * @param publicAPI object on which methods will be bounds (public)
 * @param model object on which data structure will be bounds (protected)
 * @param {IStringArrayInitialValues} initialValues (default: {})
 */
export function extend(publicAPI: object, model: object, initialValues: IStringArrayInitialValues): void;

/**
 * Method used to create a new instance of vtkStringArray
 * @param {IStringArrayInitialValues} initialValues for pre-setting some of its content
 */
export function newInstance(initialValues: IStringArrayInitialValues): vtkStringArray;

/**
 * Points and cells may sometimes have associated data that are stored as
 * strings, e.g. labels for information visualization projects. This class
 * provides a clean way to store and access those strings.
 */
export declare const vtkStringArray: {
	newInstance: typeof newInstance;
	extend: typeof extend;
}
export default vtkStringArray;
