#!/usr/bin/env python3
"""Analyze recent health data (sleep, diet, exercise)."""

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
from health.services.manual_log_storage import ManualLogStorage


def analyze_sleep(query: HealthDataQuery, days: int = 7) -> None:
    """Analyze sleep data."""
    print("=" * 60)
    print("😴 SLEEP ANALYSIS")
    print("=" * 60)

    sleep_data = query.get_latest_data("sleep", days=days)

    if not sleep_data:
        print("❌ No sleep data available\n")
        return

    total_sleep_times = []
    deep_sleep_times = []
    rem_sleep_times = []
    light_sleep_times = []
    sleep_scores = []

    print(f"\n📊 Recent {len(sleep_data)} days of sleep:\n")

    for data in sleep_data[-7:]:  # Last 7 days
        date_str = data.get("date", "Unknown")
        deep_sleep = data.get("deep_sleep_seconds", 0) / 3600
        rem_sleep = data.get("rem_sleep_seconds", 0) / 3600
        light_sleep = data.get("light_sleep_seconds", 0) / 3600
        awake_sleep = data.get("awake_sleep_seconds", 0) / 3600

        # Calculate total sleep from components (more reliable)
        total_sleep = deep_sleep + rem_sleep + light_sleep

        sleep_score = data.get("overall_sleep_score", 0)
        if sleep_score == 0:
            sleep_score = data.get("sleep_score", 0)  # Try alternative field name

        if total_sleep > 0:
            total_sleep_times.append(total_sleep)
        if deep_sleep > 0:
            deep_sleep_times.append(deep_sleep)
        if rem_sleep > 0:
            rem_sleep_times.append(rem_sleep)
        if light_sleep > 0:
            light_sleep_times.append(light_sleep)
        if sleep_score > 0:
            sleep_scores.append(sleep_score)

        print(f"📅 {date_str}")
        print(f"   Total: {total_sleep:.1f}h | Deep: {deep_sleep:.1f}h | REM: {rem_sleep:.1f}h | Light: {light_sleep:.1f}h")
        if sleep_score > 0:
            print(f"   Sleep Score: {sleep_score}/100")
        print()

    # Calculate averages
    if total_sleep_times:
        avg_total = sum(total_sleep_times) / len(total_sleep_times)
        print(f"📊 Average Total Sleep: {avg_total:.1f}h/night")

        if deep_sleep_times and avg_total > 0:
            avg_deep = sum(deep_sleep_times) / len(deep_sleep_times)
            print(f"   Average Deep Sleep: {avg_deep:.1f}h ({avg_deep/avg_total*100:.0f}%)")

        if rem_sleep_times and avg_total > 0:
            avg_rem = sum(rem_sleep_times) / len(rem_sleep_times)
            print(f"   Average REM Sleep: {avg_rem:.1f}h ({avg_rem/avg_total*100:.0f}%)")

        if sleep_scores:
            avg_score = sum(sleep_scores) / len(sleep_scores)
            print(f"   Average Sleep Score: {avg_score:.0f}/100")

    print()


def analyze_exercise(query: HealthDataQuery, days: int = 7) -> None:
    """Analyze exercise data."""
    print("=" * 60)
    print("🏃 EXERCISE ANALYSIS")
    print("=" * 60)

    # Get steps
    steps_data = query.get_latest_data("steps", days=days)

    # Get intensity minutes
    intensity_data = query.get_latest_data("intensity_minutes", days=days)

    # Get activities
    end_date = date.today()
    start_date = end_date - timedelta(days=days - 1)
    activities = query.get_activities_range(start_date, end_date)

    print(f"\n📊 Recent {days} days:\n")

    # Steps analysis
    if steps_data:
        daily_steps = []
        for data in steps_data[-7:]:
            date_str = data.get("date", "Unknown")
            steps = data.get("total_steps", 0)
            daily_steps.append(steps)
            print(f"📅 {date_str}: {steps:,} steps")

        if daily_steps:
            avg_steps = sum(daily_steps) / len(daily_steps)
            print(f"\n📊 Average Daily Steps: {avg_steps:,.0f}")

    # Intensity minutes
    print("\n💪 Intensity Minutes:")
    if intensity_data:
        for data in intensity_data[-7:]:
            date_str = data.get("date", "Unknown")
            moderate = data.get("moderate_intensity_minutes", 0)
            vigorous = data.get("vigorous_intensity_minutes", 0)
            if moderate > 0 or vigorous > 0:
                print(f"📅 {date_str}: Moderate {moderate}min | Vigorous {vigorous}min")

    # Activities
    print(f"\n🎯 Activities ({len(activities)} total):")
    if activities:
        for activity in activities[-10:]:  # Last 10 activities
            name = activity.get("activity_name", "Unknown")
            activity_type = activity.get("activity_type", "")
            duration = activity.get("duration_seconds", 0) / 60  # Convert to minutes
            distance = activity.get("distance_meters", 0) / 1000  # Convert to km
            calories = activity.get("calories", 0)
            start_time = activity.get("start_time", "Unknown")
            date_str = activity.get("date", "Unknown")

            print(f"   • {name} ({activity_type})")
            print(f"     {date_str} {start_time} | {duration:.0f}min", end="")
            if distance > 0:
                print(f" | {distance:.1f}km", end="")
            if calories > 0:
                print(f" | {calories}cal", end="")
            print()

    print()


def analyze_diet(storage: ManualLogStorage, days: int = 7) -> None:
    """Analyze diet data from manual logs."""
    print("=" * 60)
    print("🍽️  DIET ANALYSIS")
    print("=" * 60)

    end_date = date.today()
    start_date = end_date - timedelta(days=days - 1)

    print(f"\n📊 Recent {days} days:\n")

    fasting_days = []
    supplement_summary = {}
    alcohol_days = []

    current_date = start_date
    while current_date <= end_date:
        log = storage.load_log(current_date)

        date_str = current_date.isoformat()
        print(f"📅 {date_str}")

        # Fasting mode
        if log.fasting_mode:
            fasting_days.append(date_str)
            print(f"   🚫 Fasting Mode: {log.fasting_mode}")

        # Supplements
        if log.supplement_entries:
            print(f"   💊 Supplements: {len(log.supplement_entries)} entries")
            for entry in log.supplement_entries:
                supp_name = entry.supplement_name
                supplement_summary[supp_name] = supplement_summary.get(supp_name, 0) + 1

        # Alcohol
        if log.alcohol_entries:
            alcohol_days.append(date_str)
            print(f"   🍷 Alcohol: {len(log.alcohol_entries)} entries")
            for entry in log.alcohol_entries:
                print(f"      - {entry.drink_type}: {entry.amount}")

        # Diet/Meals
        if log.diet_entries:
            print(f"   🍽️  Meals: {len(log.diet_entries)} entries")

        # Body feelings
        if log.feeling_entries:
            feeling_types = [f.feeling_type for f in log.feeling_entries]
            print(f"   💭 Body Feelings: {', '.join(feeling_types)}")

        print()

        current_date += timedelta(days=1)

    # Summary
    print("📊 Summary:")
    print(f"   Fasting Days: {len(fasting_days)}/{days}")
    print(f"   Alcohol Days: {len(alcohol_days)}/{days}")

    if supplement_summary:
        print(f"\n   💊 Supplement Adherence:")
        for supp, count in sorted(supplement_summary.items(), key=lambda x: -x[1]):
            print(f"      {supp}: {count}/{days} days ({count/days*100:.0f}%)")

    print()


def main() -> None:
    """Main analysis function."""
    print("\n🏥 HEALTH DATA ANALYSIS - RECENT 7 DAYS\n")

    query = HealthDataQuery()
    storage = ManualLogStorage()

    # Analyze sleep
    analyze_sleep(query, days=7)

    # Analyze exercise
    analyze_exercise(query, days=7)

    # Analyze diet
    analyze_diet(storage, days=7)

    print("=" * 60)
    print("✅ Analysis Complete")
    print("=" * 60)


if __name__ == "__main__":
    main()
