/**
 * Tabela 12 — Cpe para telhados múltiplos com uma água vertical,
 * de tramos iguais (NBR 6123:2023).
 *
 * Fonte: NBR 6123:2023, p. 26 (Tabela 12).
 * Última auditoria: 2026-07-08 — valores exatos do PDF implementados.
 */

import { linearInterp1D } from '../log-interp';

export interface MultiSpanVerticalCpe {
  a_star: number;
  b_star: number;
  c_star: number;
  d_star: number;
  m_star: number;
  n_star: number;
  x_star: number;
  z_star: number;
  b1: number;
  b2: number;
  b3: number;
}

const THETA = [10, 15, 30] as const;

const ALPHA_0 = {
  a_star: [+0.6, +0.6, +0.7],
  b_star: [-0.6, -0.7, -0.7],
  c_star: [-0.5, -0.6, -0.6],
  d_star: [-0.2, -0.2, -0.4],
  m_star: [+0.2, +0.1, -0.1], // a: Ce = -0.3 na água m* adjacente ao trecho d*
  n_star: [-0.2, -0.2, -0.2],
  x_star: [+0.2, +0.1, +0.1],
  z_star: [-0.2, -0.3, -0.2],
};

const ALPHA_180 = {
  a_star: [-0.2, -0.2, -0.2],
  b_star: [-0.1, -0.1, -0.1],
  c_star: [-0.2, -0.2, -0.1],
  d_star: [-0.1, -0.1, -0.1],
  m_star: [-0.2, -0.2, -0.2],
  n_star: [-0.2, -0.2, -0.1], // b: Ce = -0.5 na água n* adjacente ao trecho x*
  x_star: [-0.4, -0.5, -0.6],
  z_star: [-0.2, -0.2, +0.1],
};

const ALPHA_90 = {
  b1: [-0.8, -0.8, -0.9],
  b2: [-0.6, -0.6, -0.6],
  b3: [-0.2, -0.2, -0.3],
};

function interp(values: readonly number[], theta: number): number {
  return Number(linearInterp1D(THETA, [...values], theta).toFixed(2));
}

export function getMultiSpanVerticalCpeNBR6123(
  theta: number,
  windAngle: 0 | 90 | 180 = 0,
): MultiSpanVerticalCpe {
  const t = Math.max(THETA[0], Math.min(THETA[THETA.length - 1], theta));

  const base = windAngle === 180 ? ALPHA_180 : ALPHA_0;

  return {
    a_star: interp(base.a_star, t),
    b_star: interp(base.b_star, t),
    c_star: interp(base.c_star, t),
    d_star: interp(base.d_star, t),
    m_star: interp(base.m_star, t),
    n_star: interp(base.n_star, t),
    x_star: interp(base.x_star, t),
    z_star: interp(base.z_star, t),
    b1: interp(ALPHA_90.b1, t),
    b2: interp(ALPHA_90.b2, t),
    b3: interp(ALPHA_90.b3, t),
  };
}