""" WeatherSkill - Informações de clima com fallbacks automáticos """ from modules.skills.base_skill import BaseSkill from modules.api_integrations.weather_providers import WeatherProviders class WeatherSkill(BaseSkill): """ Skill de clima que tenta múltiplos provedores: 1. Web search (se tiver contexto) 2. Weather Data API (wttr.in) 3. Open-Meteo API 4. Mensagem de erro apropriada """ def __init__(self): super().__init__( name="get_weather", description="Retorna previsão de clima para uma localização com fallbacks automáticos" ) def get_primary_provider(self): """Weather Data API como provider primário""" return self.weather_data_api def get_fallback_chain(self): """Chain de fallbacks""" return [ self.open_meteo_fallback, ] def weather_data_api(self, location: str, **kwargs) -> dict: """ Provider primário: wttr.in """ result = WeatherProviders.from_weather_api(location) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": "Weather API falhou"} def open_meteo_fallback(self, location: str, **kwargs) -> dict: """ Fallback 1: Open-Meteo (sem autenticação) """ result = WeatherProviders.from_openweather_fallback(location) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": "Open-Meteo falhou"} def _get_error_suggestion(self) -> str: """Sugestão customizada quando tudo falha""" return "Tenta com o nome de uma cidade maior ou tenta de novo mais tarde"