#!/usr/bin/python3

import zlib
import struct


class ZippedMsg:

    MSG_COMPRESS_THRESHOLD = 256
    MSG_COMPRESS_HEADER_MAGIC = 0xABE85CEA

    def check_threshold(self, msg):
        return len(msg) >= self.MSG_COMPRESS_THRESHOLD

    def compress(self, msg):
        # compress
        compressed = zlib.compress(msg)
        new_msg = struct.pack(
            ">II", self.MSG_COMPRESS_HEADER_MAGIC, len(msg)) + compressed
        return new_msg

    def decompress(self, msg):
        if len(msg) < 8:
            return None

        t = struct.unpack(">II", msg[:8])
        if(t[0] != self.MSG_COMPRESS_HEADER_MAGIC):
            return None

        x = zlib.decompress(msg[8:])
        if len(x) != t[1]:
            return None

        return x

    def is_compressed(self, msg):
        if len(msg) < 8:
            return False

        t = struct.unpack(">II", msg[:8])
        if(t[0] != self.MSG_COMPRESS_HEADER_MAGIC):
            return False

        return True
