"""Generate AI activity summaries using Gemini."""

from backend.app.models.activity import Activity, ActivityMetrics
from backend.app.services.gemini_client import chat_async

SYSTEM_PROMPT = """You are VeloBrain, an AI cycling coach.
Analyze the cycling activity data and provide a concise, insightful summary in 3-5 sentences.
Focus on: performance highlights, pacing strategy, areas for improvement, and training effect.
Be specific with numbers. Use a friendly, coaching tone.
Respond in Russian.
Use a HTML text formatting."""


def _build_activity_prompt(activity: Activity, rider_ftp: float | None = None) -> str:
    m: ActivityMetrics | None = activity.metrics
    lines = [
        f"Activity: {activity.name or 'Ride'}",
        f"Type: {activity.activity_type}",
        f"Duration: {activity.duration // 3600}h {(activity.duration % 3600) // 60}m",
    ]

    if activity.distance:
        lines.append(f"Distance: {activity.distance / 1000:.1f} km")
    if activity.elevation_gain:
        lines.append(f"Elevation: {activity.elevation_gain:.0f} m")

    if m:
        if m.avg_power:
            lines.append(f"Avg Power: {m.avg_power:.0f} W")
        if m.normalized_power:
            lines.append(f"Normalized Power: {m.normalized_power:.0f} W")
        if m.tss:
            lines.append(f"TSS: {m.tss:.0f}")
        if m.intensity_factor:
            lines.append(f"IF: {m.intensity_factor:.2f}")
        if m.variability_index:
            lines.append(f"VI: {m.variability_index:.2f}")
        if m.avg_hr:
            lines.append(f"Avg HR: {m.avg_hr} bpm")
        if m.max_hr:
            lines.append(f"Max HR: {m.max_hr} bpm")
        if m.avg_cadence:
            lines.append(f"Avg Cadence: {m.avg_cadence} rpm")

    if rider_ftp:
        lines.append(f"Rider FTP: {rider_ftp:.0f} W")

    intervals = activity.intervals or []
    work_intervals = [i for i in intervals if i.interval_type == "work"]
    if work_intervals:
        lines.append(f"Work intervals: {len(work_intervals)}")
        powers = [i.avg_power for i in work_intervals if i.avg_power]
        if powers:
            lines.append(f"Interval avg powers: {', '.join(f'{p:.0f}W' for p in powers)}")

    return "\n".join(lines)


async def generate_summary(activity: Activity, rider_ftp: float | None = None) -> str:
    prompt = _build_activity_prompt(activity, rider_ftp)
    messages = [{"role": "user", "text": prompt}]
    return await chat_async(messages, system_instruction=SYSTEM_PROMPT, temperature=0.5)
