// list all stations in a single file
// only find stations with 4 letter codes

const https = require('./https');
const fs = require('fs');
const path = require('path');

// immediately invoked function so we can access async/await
const start = async () => {
	// load the list of states
	const states = ['AK', 'NC', 'VA', 'TX', 'GA', 'PR'];
	// const states = require('./stations-states.js');

	let output = {};
	// loop through states
	await Promise.all(states.map(async (state) => {
		try {
			// get list and parse the JSON
			const stationsRaw = await https(`https://api.weather.gov/stations?state=${state}`);
			const stationsAll = JSON.parse(stationsRaw).features;
			// filter stations for 4 letter identifiers
			const stations = stationsAll.filter(station => station.properties.stationIdentifier.match(/^[A-Z]{4}$/));
			// add each resulting station to the output
			stations.forEach(station => {
				const id = station.properties.stationIdentifier;
				if (output[id]) {
					console.log(`Duplicate station: ${state}-${id}`);
					return;
				}
				output[id] = {
					id,
					city: station.properties.name,
					state: state,
					lat: station.geometry.coordinates[1],
					lon: station.geometry.coordinates[0],
				};
			});
			console.log(`Complete: ${state}`);
		} catch (e) {
			console.error(`Unable to get state: ${state}`);
			return false;
		}
	}));

	// write the output
	fs.writeFileSync(path.join(__dirname, 'output/stations.js'), JSON.stringify(output, null, 2));

};

// immediately invoked function allows access to async
(async () => {
	await start();
})();

