# /// script
# requires-python = ">=3.11"
# dependencies = [
#   "pyroparse==0.11.0",
# ]
# ///
"""
Compares what an analysis actually sees: the second-by-second record data of the
watch's original FIT file and the Connect API file, for "One activity, four FIT files".

    uv run static/files/garmin-fit/fit_records.py

Reads both files with every available column and compares them column by column.
"""

from pathlib import Path

import pyroparse

HERE = Path(__file__).parent
original = pyroparse.read_fit(HERE / "garmin_device_usb.fit", columns="all")
api = pyroparse.read_fit(HERE / "garmin_connect_api.fit", columns="all")

print(f"Rows: original {original.num_rows}, API {api.num_rows}\n")

print("| column | values in original | values in API | identical |")
print("|---|---|---|---|")
for column in original.column_names:
    values = original.num_rows - original[column].null_count
    if column in api.column_names:
        api_values = api.num_rows - api[column].null_count
        identical = original[column].equals(api[column])
    else:
        api_values, identical = "(no column)", "n/a"
    if values or api_values:
        print(f"| {column} | {values} | {api_values} | {identical} |")

empty = [c for c in original.column_names if original[c].null_count == original.num_rows]
print(f"\nColumns without any values in the original (not shown): {', '.join(empty)}")
print("Columns only in the API file:", [c for c in api.column_names if c not in original.column_names])

copies = original["unknown_field_144"].equals(original["heart_rate"])
print(f"\nunknown_field_144 is an exact copy of heart_rate: {copies}")
