/** * WeatherCard Component * * Displays weather forecast with daily conditions, temperatures, and travel advice. * Uses ADK blue styling to match the Weather Agent branding. */ import React from "react"; // Type definition matching the backend Weather Agent structure export interface WeatherData { destination: string; forecast: Array<{ day: number; date: string; condition: string; highTemp: number; lowTemp: number; precipitation: number; humidity: number; windSpeed: number; description: string; }>; travelAdvice: string; bestDays: number[]; } interface WeatherCardProps { data: WeatherData; } /** * Get weather icon based on condition */ const getWeatherIcon = (condition: string): string => { const cond = condition.toLowerCase(); if (cond.includes("sun") || cond.includes("clear")) return "☀️"; if (cond.includes("cloud")) return "☁️"; if (cond.includes("rain")) return "🌧️"; if (cond.includes("storm")) return "⛈️"; if (cond.includes("snow")) return "❄️"; if (cond.includes("fog") || cond.includes("mist")) return "🌫️"; return "🌤️"; }; /** * Get condition color styling using CopilotCloud Palette */ const getConditionStyle = (condition: string) => { const cond = condition.toLowerCase(); if (cond.includes("sun") || cond.includes("clear")) return "bg-[#FFF388]/20 border-[#FFF388] text-[#010507]"; if (cond.includes("cloud")) return "bg-[#C9C9DA]/20 border-[#C9C9DA] text-[#010507]"; if (cond.includes("rain") || cond.includes("storm")) return "bg-[#BEC2FF]/20 border-[#BEC2FF] text-[#010507]"; return "bg-[#85E0CE]/20 border-[#85E0CE] text-[#010507]"; }; export const WeatherCard: React.FC = ({ data }) => { return (
{/* Header */}
🌤️

{data.destination} Weather

{data.forecast.length}-day forecast

{/* Forecast Days */}
{data.forecast.map((day, index) => { const isBestDay = data.bestDays.includes(day.day); return (
{/* Best Day Badge */} {isBestDay && (
BEST
)} {/* Day Header */}
{day.day}
{day.date}
{getWeatherIcon(day.condition)}
{/* Condition */}
{day.condition}
{/* Temperature */}
{day.highTemp}° {day.lowTemp}°
{/* Weather Stats */}
💧 {day.precipitation}% 💨 {day.windSpeed}mph
Humidity {day.humidity}%
{/* Description */} {day.description && (

{day.description}

)}
); })}
{/* Travel Advice */} {data.travelAdvice && (
💼

Travel Advice

{data.travelAdvice}

)} {/* Best Days Highlight */} {data.bestDays && data.bestDays.length > 0 && (
Best days for outdoor activities: Day{" "} {data.bestDays.join(", Day ")}
)}
); };