"""Response formatting utilities""" from typing import Dict def format_card_display(card_data: Dict) -> str: """Format card recommendation for display""" card_name = card_data.get("card_name", "Unknown Card") reward_rate = card_data.get("reward_rate", 0) reward_amount = card_data.get("reward_amount", 0) category = card_data.get("category", "General") reasoning = card_data.get("reasoning", "") return f""" ### 💳 {card_name} **Reward Rate:** {reward_rate}x points **Reward Amount:** ${reward_amount:.2f} **Category:** {category} **Why:** {reasoning} """ def format_full_recommendation(response: Dict) -> str: """Format complete recommendation response""" if response.get("error"): return f"❌ **Error:** {response.get('message', 'Unknown error')}" # Header output = f""" # 🎯 Recommendation for {response.get('merchant', 'Unknown')} **Amount:** ${response.get('amount_usd', 0):.2f} **Date:** {response.get('transaction_date', 'N/A')} **User:** {response.get('user_id', 'N/A')} --- ## 🏆 Best Card to Use """ # Recommended card recommended = response.get("recommended_card", {}) output += format_card_display(recommended) # RAG Insights rag_insights = response.get("rag_insights") if rag_insights: output += f""" --- ## 📚 Card Benefits {rag_insights.get('benefits', 'No additional information available.')} """ if rag_insights.get('tips'): output += f""" 💡 **Pro Tip:** {rag_insights.get('tips')} """ # Forecast Warning forecast = response.get("forecast_warning") if forecast: risk_level = forecast.get("risk_level", "low") message = forecast.get("message", "") if risk_level == "high": emoji = "🚨" elif risk_level == "medium": emoji = "⚠️" else: emoji = "✅" output += f""" --- ## {emoji} Spending Status {message} **Current Spend:** ${forecast.get('current_spend', 0):.2f} **Spending Cap:** ${forecast.get('cap', 0):.2f} **Projected Spend:** ${forecast.get('projected_spend', 0):.2f} """ # Alternative cards alternatives = response.get("alternative_cards", []) if alternatives: output += "\n---\n\n## 🔄 Alternative Cards\n\n" for i, alt in enumerate(alternatives[:2], 1): output += f"### Option {i}\n" output += format_card_display(alt) # Metadata services = response.get("services_used", []) time_ms = response.get("orchestration_time_ms", 0) output += f""" --- **Services Used:** {', '.join(services)} **Response Time:** {time_ms:.0f}ms """ return output def format_comparison_table(cards: list) -> str: """Format card comparison as markdown table""" if not cards: return "No cards to compare." table = """ | Card | Reward Rate | Reward Amount | Category | |------|-------------|---------------|----------| """ for card in cards: name = card.get("card_name", "Unknown") rate = card.get("reward_rate", 0) amount = card.get("reward_amount", 0) category = card.get("category", "N/A") table += f"| {name} | {rate}x | ${amount:.2f} | {category} |\n" return table # utils/formatters.py def format_analytics_metrics(analytics: Dict[str, Any]) -> tuple: """ Format analytics data for display Returns: Tuple of (metrics_html, table_md, insights_md, forecast_md) """ # Format metric cards metrics_html = f"""
💰 Potential Annual Savings
📈 Rewards Rate Increase
✅ Optimized Transactions
⭐ Optimization Score