import type { Event } from '../api/types.js';
export function formatEventSummary(event: Event): string {
const parts: string[] = [];
parts.push(`[${event.severity}] ${event.headline}`);
parts.push(`Type: ${event.event_type.replace(/_/g, ' ')}`);
parts.push(`Status: ${event.status}`);
if (event.description) {
parts.push(`Details: ${event.description}`);
}
if (event.roads && event.roads.length > 0) {
const roadInfo = event.roads.map(road => {
let roadStr = road.name;
if (road.from || road.to) {
const fromTo = [road.from, road.to].filter(Boolean).join(' to ');
if (fromTo) roadStr += ` (${fromTo})`;
}
if (road.direction) {
roadStr += ` ${road.direction}`;
}
return roadStr;
}).join(', ');
parts.push(`Roads: ${roadInfo}`);
}
if (event.schedule?.intervals && event.schedule.intervals.length > 0) {
parts.push(`Schedule: ${event.schedule.intervals.join(', ')}`);
}
if (event.updated) {
parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`);
}
return parts.join('\n');
}
export function formatEventList(events: Event[]): string {
if (events.length === 0) {
return 'No events found.';
}
const sortedEvents = [...events].sort((a, b) => {
const severityOrder = { MAJOR: 0, MODERATE: 1, MINOR: 2, UNKNOWN: 3 };
return severityOrder[a.severity] - severityOrder[b.severity];
});
const lines: string[] = [];
lines.push(`Found ${events.length} event(s):\n`);
sortedEvents.forEach((event, index) => {
lines.push(`${index + 1}. ${formatEventSummary(event)}`);
lines.push('');
});
return lines.join('\n');
}
export function formatClosureInfo(event: Event): string {
const parts: string[] = [];
parts.push(`[${event.severity}] ${event.headline}`);
if (event.roads && event.roads.length > 0) {
const roadInfo = event.roads.map(road => {
let roadStr = `${road.name}`;
if (road.from && road.to) {
roadStr += ` from ${road.from} to ${road.to}`;
} else if (road.from) {
roadStr += ` from ${road.from}`;
} else if (road.to) {
roadStr += ` to ${road.to}`;
}
if (road.direction) {
roadStr += ` (${road.direction})`;
}
return roadStr;
}).join(', ');
parts.push(`Location: ${roadInfo}`);
}
if (event.description) {
parts.push(`Details: ${event.description}`);
}
if (event.schedule?.intervals && event.schedule.intervals.length > 0) {
parts.push(`Duration: ${event.schedule.intervals.join(', ')}`);
} else if (event.status === 'ACTIVE') {
parts.push(`Duration: Ongoing (no end time specified)`);
}
if (event.updated) {
parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`);
}
return parts.join('\n');
}
export function formatWeatherAlert(event: Event): string {
const parts: string[] = [];
parts.push(`[${event.severity}] ${event.headline}`);
parts.push(`Type: ${event.event_type.replace(/_/g, ' ')}`);
if (event.description) {
parts.push(`Alert: ${event.description}`);
}
if (event.roads && event.roads.length > 0) {
const affectedRoads = event.roads.map(r => r.name).join(', ');
parts.push(`Affected Roads: ${affectedRoads}`);
}
if (event.areas && event.areas.length > 0) {
const affectedAreas = event.areas.map(a => a.name).join(', ');
parts.push(`Affected Areas: ${affectedAreas}`);
}
if (event.updated) {
parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`);
}
return parts.join('\n');
}