"""Local SFP structures for VideoReceiverSFP module (ctypes-based).

Copied/adapted minimal subset from main project to remain self-contained.
"""
import ctypes


class SFPHeader(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("SFP_MARKER", ctypes.c_uint8),
        ("SFP_DIRECTION", ctypes.c_uint8),
        ("SFP_PROT_VER", ctypes.c_uint8),
        ("SFP_PT_SPARE", ctypes.c_uint8),
        ("SFP_TAG", ctypes.c_uint8),
        ("SFP_SRC", ctypes.c_uint8),
        ("SFP_FLOW", ctypes.c_uint8),
        ("SFP_TID", ctypes.c_uint8),
        ("SFP_FLAGS", ctypes.c_uint8),
        ("SFP_WIN", ctypes.c_uint8),
        ("SFP_ERR", ctypes.c_uint8),
        ("SFP_ERR_INFO", ctypes.c_uint8),
        ("SFP_TOTFRGAS", ctypes.c_uint16),
        ("SFP_FRAG", ctypes.c_uint16),
        ("SFP_RECTYPE", ctypes.c_uint8),
        ("SFP_RECSPARE", ctypes.c_uint8),
        ("SFP_PLDAP", ctypes.c_uint8),
        ("SFP_PLEXT", ctypes.c_uint8),
        ("SFP_RECCOUNTER", ctypes.c_uint16),
        ("SFP_PLSIZE", ctypes.c_uint16),
        ("SFP_TOTSIZE", ctypes.c_uint32),
        ("SFP_PLOFFSET", ctypes.c_uint32),
    ]

    @classmethod
    def size(cls):
        return ctypes.sizeof(cls)

    @staticmethod
    def get_field_offset(field_name: str) -> int:
        try:
            return getattr(SFPHeader, field_name).offset
        except AttributeError:
            return -1
