""" Shared utility functions — time formatting, address formatting, etc. """ from datetime import datetime, timedelta from core import settings_manager as settings def format_time(time_str: str) -> str: """Convert 'HH:MM' (24h) to '2:30 PM' (12h) format for display.""" t = datetime.strptime(time_str, "%H:%M") return t.strftime("%I:%M %p") #previously %-I def format_date(date_str: str) -> str: """Convert 'YYYY-MM-DD' to 'Friday, March 20, 2026' for display.""" d = datetime.strptime(date_str, "%Y-%m-%d") return d.strftime("%A, %B %d, %Y") #previously %-d def is_future_date(date_str: str, min_hours_ahead: int = 24) -> bool: """Check if a date string is at least min_hours_ahead in the future.""" target = datetime.strptime(date_str, "%Y-%m-%d") cutoff = datetime.now() + timedelta(hours=min_hours_ahead) return target >= cutoff def build_event_title(visit_level: int | str, patient_name: str, provider_name: str) -> str: """Build a Google Calendar event title. Format: '[Level X] PatientName — ProviderName' """ level_info = settings.get_visit_levels().get(visit_level, {}) label = level_info.get("label", f"Level {visit_level}") return f"[{label}] {patient_name} — {provider_name}" def build_event_description(patient: dict, provider: dict, visit_address: str) -> str: """Build a Google Calendar event description with contact info and address.""" lines = [ f"Patient: {patient.get('name', 'N/A')}", f"Patient Email: {patient.get('email', 'N/A')}", f"Provider: {provider.get('name', 'N/A')}", f"Provider Email: {provider.get('email', 'N/A')}", f"Visit Address: {visit_address}", ] if patient.get("notes"): lines.append(f"Notes: {patient['notes']}") return "\n".join(lines) def minutes_to_display(minutes: int) -> str: """Convert minutes to a readable string: '1h 15m' or '45m'.""" if minutes < 60: return f"{minutes}m" hours = minutes // 60 remaining = minutes % 60 if remaining == 0: return f"{hours}h" return f"{hours}h {remaining}m"