/**
 * Tabela 4 — Valores mínimos do fator estatístico S₃ (NBR 6123:2023, sec. 5.4)
 *
 * Cinco grupos conforme tipo de ocupação/uso. O Anexo B fornece
 * valores refinados por Pₘ e vida útil (ver table-b.ts).
 *
 * Fonte: NBR 6123:2023, p. 15 (Tabela 4).
 * Última auditoria: 2026-07-07.
 */

export interface S3Group {
  readonly id: 1 | 2 | 3 | 4 | 5;
  readonly s3: number;
  readonly pm: number;
  readonly vidaUtilAnos: number;
  readonly descricao: string;
}

export const TABLE_4: readonly S3Group[] = [
  {
    id: 1,
    s3: 1.11,
    pm: 0.63,
    vidaUtilAnos: 100,
    descricao:
      'Hospitais, quartéis de bombeiros/segurança, centrais de controle. Pontes rodoviárias/ferroviárias. Substâncias inflamáveis/tóxicas/explosivas. Vedações (telhas, vidros, painéis).',
  },
  {
    id: 2,
    s3: 1.06,
    pm: 0.63,
    vidaUtilAnos: 75,
    descricao:
      'Estruturas com risco à vida: aglomerações > 200 pessoas, creches > 150, escolas > 250. Vedações (telhas, vidros, painéis).',
  },
  {
    id: 3,
    s3: 1.00,
    pm: 0.63,
    vidaUtilAnos: 50,
    descricao:
      'Edificações para residências, hotéis, comércio, indústrias. Estruturas ou elementos estruturais desmontáveis com vistas a reutilização. Vedações (telhas, vidros, painéis).',
  },
  {
    id: 4,
    s3: 0.95,
    pm: 0.63,
    vidaUtilAnos: 30,
    descricao:
      'Edificações não destinadas à ocupação humana (depósitos, silos) e sem circulação de pessoas no entorno. Vedações (telhas, vidros, painéis).',
  },
  {
    id: 5,
    s3: 0.83,
    pm: 0.63,
    vidaUtilAnos: 2,
    descricao:
      'Edificações temporárias não reutilizáveis. Estruturas dos Grupos 1 a 4 durante a construção (prazo máximo de 2 anos). Vedações (telhas, vidros, painéis).',
  },
] as const;

export function getS3ByGroup(group: 1 | 2 | 3 | 4 | 5): number {
  const entry = TABLE_4.find((g) => g.id === group);
  if (!entry) throw new Error(`Grupo S3 inválido: ${group}`);
  return entry.s3;
}

export function getS3VidaUtilByGroup(group: 1 | 2 | 3 | 4 | 5): number {
  const entry = TABLE_4.find((g) => g.id === group);
  if (!entry) throw new Error(`Grupo S3 inválido: ${group}`);
  return entry.vidaUtilAnos;
}