/**
 * Anexo C (informativo) — 49 estações meteorológicas do Serviço de
 * Proteção ao Voo do Ministério da Aeronáutica + V₀ estimado pelas
 * isopletas da Figura 1.
 *
 * Os valores de V₀ são aproximações por interpolação das isopletas
 * (intervalo de 5 m/s). Devem ser usados como ponto de partida;
 * o projetista pode sobrescrever manualmente com valor específico
 * do local de obra.
 *
 * Fonte: NBR 6123:2023, p. 93–94 (Anexo C, Tabela C.1) + Figura 1 (isopletas).
 * Última auditoria: 2026-07-07 — altitudes e coordenadas conferidas com
 *   PDF oficial (p. 105–106).
 *
 * ⚠️ PENDENTE: conferir V₀ de cada estação contra a Figura 1 oficial
 *   (atualmente aproximação por interpolação das isopletas).
 */

export interface MeteorologicalStation {
  readonly id: number;
  readonly nome: string;
  readonly latitude: string;
  readonly longitude: string;
  readonly altitude: number;
  /** Velocidade básica V₀ (m/s) — aproximada por interpolação das isopletas */
  readonly v0: number;
}

export const METEOROLOGICAL_STATIONS: readonly MeteorologicalStation[] = [
  { id: 1, nome: 'Afonsos', latitude: '22°52′S', longitude: '43°22′W', altitude: 3, v0: 35 },
  { id: 2, nome: 'Anápolis', latitude: '16°22′S', longitude: '48°57′W', altitude: 1097, v0: 35 },
  { id: 3, nome: 'Amapá', latitude: '02°04′N', longitude: '50°32′W', altitude: 10, v0: 35 },
  { id: 4, nome: 'Belém', latitude: '01°23′S', longitude: '48°29′W', altitude: 16, v0: 30 },
  { id: 5, nome: 'Belo Horizonte', latitude: '19°51′S', longitude: '43°57′W', altitude: 789, v0: 35 },
  { id: 6, nome: 'Brasília', latitude: '15°52′S', longitude: '47°55′W', altitude: 1061, v0: 35 },
  { id: 7, nome: 'Bagé', latitude: '31°23′S', longitude: '54°07′W', altitude: 180, v0: 45 },
  { id: 8, nome: 'Boa Vista', latitude: '02°50′N', longitude: '60°42′W', altitude: 140, v0: 30 },
  { id: 9, nome: 'Caravelas', latitude: '17°38′S', longitude: '39°15′W', altitude: 4, v0: 40 },
  { id: 10, nome: 'Cachimbo', latitude: '09°22′S', longitude: '54°54′W', altitude: 432, v0: 30 },
  { id: 11, nome: 'Cuiabá', latitude: '15°39′S', longitude: '56°06′W', altitude: 182, v0: 35 },
  { id: 12, nome: 'Campinas', latitude: '23°00′S', longitude: '47°08′W', altitude: 648, v0: 35 },
  { id: 13, nome: 'Curitiba', latitude: '25°31′S', longitude: '49°11′W', altitude: 910, v0: 40 },
  { id: 14, nome: 'Campo Grande', latitude: '20°28′S', longitude: '54°40′W', altitude: 552, v0: 35 },
  { id: 15, nome: 'Carolina', latitude: '07°20′S', longitude: '47°26′W', altitude: 181, v0: 30 },
  { id: 16, nome: 'Cumbica', latitude: '23°26′S', longitude: '46°28′W', altitude: 763, v0: 35 },
  { id: 17, nome: 'Fortaleza', latitude: '03°47′S', longitude: '36°32′W', altitude: 25, v0: 35 },
  { id: 18, nome: 'Florianópolis', latitude: '27°40′S', longitude: '48°33′W', altitude: 5, v0: 45 },
  { id: 19, nome: 'Foz do Iguaçu', latitude: '25°31′S', longitude: '54°35′W', altitude: 180, v0: 40 },
  { id: 20, nome: 'Fernando de Noronha', latitude: '03°51′S', longitude: '32°25′W', altitude: 45, v0: 35 },
  { id: 21, nome: 'Goiânia', latitude: '16°38′S', longitude: '49°13′W', altitude: 747, v0: 35 },
  { id: 22, nome: 'Jacareacanga', latitude: '06°16′S', longitude: '57°44′W', altitude: 110, v0: 30 },
  { id: 23, nome: 'Londrina', latitude: '23°20′S', longitude: '51°08′W', altitude: 570, v0: 35 },
  { id: 24, nome: 'Lapa', latitude: '13°16′S', longitude: '49°25′W', altitude: 439, v0: 35 },
  { id: 25, nome: 'Manaus', latitude: '03°09′S', longitude: '59°59′W', altitude: 84, v0: 30 },
  { id: 26, nome: 'Maceió', latitude: '09°31′S', longitude: '35°47′W', altitude: 115, v0: 35 },
  { id: 27, nome: 'Natal', latitude: '05°55′S', longitude: '35°15′W', altitude: 49, v0: 35 },
  { id: 28, nome: 'Ponta Porã', latitude: '22°33′S', longitude: '55°42′W', altitude: 660, v0: 40 },
  { id: 29, nome: 'Parnaíba', latitude: '02°54′S', longitude: '41°45′W', altitude: 5, v0: 35 },
  { id: 30, nome: 'Petrolina', latitude: '09°24′S', longitude: '40°30′W', altitude: 376, v0: 35 },
  { id: 31, nome: 'Pirassununga', latitude: '21°59′S', longitude: '47°21′W', altitude: 598, v0: 35 },
  { id: 32, nome: 'Porto Alegre', latitude: '30°00′S', longitude: '51°10′W', altitude: 4, v0: 45 },
  { id: 33, nome: 'Porto Nacional', latitude: '10°25′S', longitude: '48°25′W', altitude: 290, v0: 30 },
  { id: 34, nome: 'Porto Velho', latitude: '08°46′S', longitude: '63°54′W', altitude: 125, v0: 30 },
  { id: 35, nome: 'Recife', latitude: '08°08′S', longitude: '34°55′W', altitude: 19, v0: 35 },
  { id: 36, nome: 'Rio Branco', latitude: '09°58′S', longitude: '67°47′W', altitude: 136, v0: 30 },
  { id: 37, nome: 'Rio de Janeiro (Santos Dumont)', latitude: '22°54′S', longitude: '43°10′W', altitude: 5, v0: 35 },
  { id: 38, nome: 'Santarém', latitude: '02°26′S', longitude: '54°43′W', altitude: 72, v0: 30 },
  { id: 39, nome: 'São Luiz', latitude: '02°35′S', longitude: '44°14′W', altitude: 54, v0: 35 },
  { id: 40, nome: 'Salvador', latitude: '12°54′S', longitude: '38°20′W', altitude: 13, v0: 35 },
  { id: 41, nome: 'Santa Cruz', latitude: '22°56′S', longitude: '43°43′W', altitude: 4, v0: 35 },
  { id: 42, nome: 'São Paulo (Congonhas)', latitude: '23°37′S', longitude: '46°39′W', altitude: 802, v0: 35 },
  { id: 43, nome: 'Santos', latitude: '23°56′S', longitude: '46°16′W', altitude: 3, v0: 40 },
  { id: 44, nome: 'Santa Maria', latitude: '29°43′S', longitude: '53°42′W', altitude: 85, v0: 45 },
  { id: 45, nome: 'Teresina', latitude: '05°05′S', longitude: '42°49′W', altitude: 69, v0: 35 },
  { id: 46, nome: 'Uberlândia', latitude: '18°55′S', longitude: '48°14′W', altitude: 923, v0: 35 },
  { id: 47, nome: 'Uruguaiana', latitude: '29°47′S', longitude: '57°02′W', altitude: 74, v0: 45 },
  { id: 48, nome: 'Vitória', latitude: '20°16′S', longitude: '40°17′W', altitude: 4, v0: 35 },
  { id: 49, nome: 'Vilhena', latitude: '12°44′S', longitude: '60°08′W', altitude: 652, v0: 30 },
];

export function getStationById(id: number): MeteorologicalStation | undefined {
  return METEOROLOGICAL_STATIONS.find((s) => s.id === id);
}

export function searchStations(query: string): MeteorologicalStation[] {
  const q = query.trim().toLowerCase();
  if (!q) return [...METEOROLOGICAL_STATIONS];
  return METEOROLOGICAL_STATIONS.filter(
    (s) =>
      s.nome.toLowerCase().includes(q) ||
      s.latitude.toLowerCase().includes(q) ||
      s.longitude.toLowerCase().includes(q),
  );
}