import { bilinearInterp } from '../bilinear-interp';

/**
 * Tabela 28 — Fator de proteção η para estruturas reticuladas múltiplas
 * (Pórticos paralelos).
 * NBR 6123:2023 (correspondente à antiga Tabela 8).
 * 
 * Linhas: Índice de solidez (φ)
 * Colunas: Distância relativa (e/h ou e/b)
 */

const PHI = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 1.0] as const;
const EH = [0.5, 1.0, 2.0, 4.0, 8.0] as const;

const ETA_DATA: ReadonlyArray<ReadonlyArray<number>> = [
  // e/h = 0.5,  1.0,  2.0,  4.0,  8.0
  [ 1.00, 1.00, 1.00, 1.00, 1.00 ], // φ = 0.1
  [ 0.90, 1.00, 1.00, 1.00, 1.00 ], // φ = 0.2
  [ 0.80, 0.90, 1.00, 1.00, 1.00 ], // φ = 0.3
  [ 0.60, 0.80, 1.00, 1.00, 1.00 ], // φ = 0.4
  [ 0.45, 0.70, 1.00, 1.00, 1.00 ], // φ = 0.5
  [ 0.30, 0.60, 1.00, 1.00, 1.00 ], // φ = 0.6
  [ 0.30, 0.60, 1.00, 1.00, 1.00 ], // φ = 1.0 (mantido para saturação)
];

/**
 * Retorna o fator de proteção η.
 * @param phi Índice de solidez (0 a 1)
 * @param eh Razão entre a distância e a menor dimensão ortogonal ao vento (e/h ou e/b)
 */
export function getEtaTable28(phi: number, eh: number): number {
  return bilinearInterp(
    {
      xs: EH as unknown as number[],
      ys: PHI as unknown as number[],
      values: ETA_DATA as unknown as (readonly number[])[],
    },
    eh,
    phi
  );
}
