#!/usr/bin/env python3
"""
Example script demonstrating health data query usage.

This script shows how to use the HealthDataQuery service to:
1. Get a daily summary
2. Query metrics over a date range
3. Calculate statistics
"""

import sys
from datetime import date, timedelta
from pathlib import Path

# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))

from health.services.query import HealthDataQuery


def example_daily_summary() -> None:
    """Example: Get today's health data summary."""
    print("\n" + "="*80)
    print("Example 1: Daily Summary")
    print("="*80 + "\n")

    query = HealthDataQuery()
    today = date.today()

    summary = query.get_daily_summary(today)

    print(f"Date: {summary['date']}")
    print(f"Metrics available: {list(summary['metrics'].keys())}")
    print(f"Activities count: {len(summary['activities'])}")

    # Show steps if available
    if "steps" in summary["metrics"]:
        steps_data = summary["metrics"]["steps"]
        print(f"\nSteps today: {steps_data.get('total_steps', 'N/A')}")


def example_metric_range() -> None:
    """Example: Get sleep data for the past week."""
    print("\n" + "="*80)
    print("Example 2: Metric Range (Sleep - Last 7 Days)")
    print("="*80 + "\n")

    query = HealthDataQuery()
    end_date = date.today()
    start_date = end_date - timedelta(days=6)

    sleep_data = query.get_metric_range("sleep", start_date, end_date)

    print(f"Found {len(sleep_data)} sleep records\n")

    for record in sleep_data:
        total_sleep_hrs = (record.get('total_sleep_seconds', 0) or 0) / 3600
        sleep_score = record.get('sleep_score', 'N/A')
        print(f"  {record['date']}: {total_sleep_hrs:.1f}h, Score: {sleep_score}")


def example_statistics() -> None:
    """Example: Calculate statistics for steps over a month."""
    print("\n" + "="*80)
    print("Example 3: Statistics (Steps - Last 30 Days)")
    print("="*80 + "\n")

    query = HealthDataQuery()
    end_date = date.today()
    start_date = end_date - timedelta(days=29)

    stats = query.get_metric_statistics(
        metric_type="steps",
        start_date=start_date,
        end_date=end_date,
        fields=["total_steps", "total_distance_meters", "calories_burned"]
    )

    for field, values in stats.items():
        if values["count"] > 0:
            print(f"\n{field}:")
            print(f"  Min: {values['min']:,}")
            print(f"  Max: {values['max']:,}")
            print(f"  Avg: {values['avg']:,.2f}")
            print(f"  Days with data: {values['count']}")


def example_activities() -> None:
    """Example: Get all activities from the past week."""
    print("\n" + "="*80)
    print("Example 4: Activities (Last 7 Days)")
    print("="*80 + "\n")

    query = HealthDataQuery()
    end_date = date.today()
    start_date = end_date - timedelta(days=6)

    activities = query.get_activities_range(start_date, end_date)

    print(f"Found {len(activities)} activities\n")

    for activity in activities:
        activity_type = activity.get("activity_type", "Unknown")
        duration_mins = (activity.get("duration_seconds", 0) or 0) / 60
        distance_km = (activity.get("distance_meters", 0) or 0) / 1000

        print(f"  {activity['date']}: {activity_type}")
        print(f"    Duration: {duration_mins:.0f} min, Distance: {distance_km:.2f} km")


if __name__ == "__main__":
    print("\n🏥 Health Data Query Examples\n")

    try:
        example_daily_summary()
        example_metric_range()
        example_statistics()
        example_activities()

        print("\n" + "="*80)
        print("✅ Examples completed successfully!")
        print("="*80 + "\n")

    except Exception as e:
        print(f"\n❌ Error running examples: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
