import {
  checkArrayOfNumbers,
  checkNumber,
  funEMA,
  funMA,
  funRound,
  TMixed,
} from "../common";

export function TRIX(
  CLOSE: number[],
  N: number = 12,
  M: number = 9
): { TRIX: TMixed[]; MATRIX: TMixed[] } {
  // check input data
  checkArrayOfNumbers(CLOSE, "CLOSE");

  // check n and m parameters
  checkNumber(N, 2, CLOSE, "N", "CLOSE");
  checkNumber(M, 2, CLOSE, "M", "CLOSE");
  const MTR: TMixed[] = funEMA(funEMA(funEMA(CLOSE, N), N), N);
  const TRIX: TMixed[] = [null];
  for (let i = 1; i < MTR.length; i++) {
    TRIX.push(
      MTR[i] !== null && MTR[i - 1] !== null
        ? (((MTR[i] as number) - (MTR[i - 1] as number)) /
            (MTR[i - 1] as number)) *
            100
        : null
    );
  }
  const MATRIX: TMixed[] = funMA(TRIX, M).map((v) => funRound(v, 3));
  return { TRIX: TRIX.map((v) => funRound(v, 3)), MATRIX };
}
