"""Функции дедупликации GPS-треков (ET-008)."""


def compute_dedup_key(geom_bounds: tuple, metadata: dict) -> str:
    """Вычисляет ключ дедупликации для трека.

    Args:
        geom_bounds: (min_lon, min_lat, max_lon, max_lat)
        metadata: dict с полями length_m и created_at

    Returns:
        Строка вида "{bbox_round}|{length_bucket}|{date_bucket}"
    """
    min_lon, min_lat, max_lon, max_lat = geom_bounds

    # Округление bbox до 2 знаков после запятой
    bbox_round = (
        round(min_lon, 2),
        round(min_lat, 2),
        round(max_lon, 2),
        round(max_lat, 2),
    )

    # Длина в бакетах по 1 км
    length_m = metadata.get("length_m", 0) or 0
    length_bucket = round(length_m / 1000) * 1000

    # Дата: первые 10 символов (YYYY-MM-DD) или пустая строка
    created_at = metadata.get("created_at") or ""
    date_bucket = created_at[:10] if created_at else ""

    return f"{bbox_round}|{length_bucket}|{date_bucket}"
