import struct

from pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter


def handle_gps_data(printer: FsfwTmTcPrinter, hk_data: bytes):
    pw = PrintWrapper(printer)
    pw.dlog(f"Received GPS data, HK data length {len(hk_data)}")
    current_idx = 0
    fmt_str = "!ddddBBBHBBBBBI"
    inc_len = struct.calcsize(fmt_str)
    (
        lat,
        long,
        alt,
        speed,
        fix,
        sats_in_use,
        sats_in_view,
        year,
        month,
        day,
        hours,
        minutes,
        seconds,
        unix_seconds,
    ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
    current_idx += inc_len
    date_string = f"{day}.{month}.{year} {hours}:{minutes}:{seconds}"
    pw.dlog(f"Lat: {lat} deg")
    pw.dlog(f"Long: {long} deg")
    pw.dlog(f"Altitude: {alt} m | Speed: {speed} m/s")
    pw.dlog(
        f"Fix Type: {fix} | Sats in View {sats_in_view} | Sats in Use {sats_in_use}"
    )
    pw.dlog(f"GNSS Date: {date_string}")
    pw.dlog(f"Unix seconds {unix_seconds}")
    printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=14)