Documentation
from enum import Enum
import json

import msgpack
from wit_world.imports.app import Serialize

class SerializeType(Enum):
    JSON = "json"
    MSGPACK = "msgpack"
    UNKOWN = "unknown"

class WasvyCodec():
    def __init__(self):
        serialize_type = Serialize().get_type()
        if serialize_type == "json":
            self.serialize_type = SerializeType.JSON
        elif serialize_type == "msgpack":
            self.serialize_type = SerializeType.MSGPACK
        else:
            raise ValueError(f"Unsupported serialize type: {serialize_type}")

    def loads(self, data):
        if self.serialize_type == SerializeType.JSON:
            return json.loads(data)
        elif self.serialize_type == SerializeType.MSGPACK:
            return msgpack.loads(data)
        
    def dumps(self, obj):
        if self.serialize_type == SerializeType.JSON:
            return json.dumps(obj).encode('utf-8')
        elif self.serialize_type == SerializeType.MSGPACK:
            return msgpack.dumps(obj, use_bin_type=True)
        

_codec_instance: WasvyCodec | None = None


def get_codec() -> WasvyCodec:
    global _codec_instance
    if _codec_instance is None:
        _codec_instance = WasvyCodec()
    return _codec_instance