class CesiumEntity:
    next_id = 0
    def __init__(self,
                 name,
                 position,
                 attitude,
                 color="white",
                 wireframe=False,
                 tracked=True,
                 active=True,
                 pathColor="blue",
                 alpha=1,
                 useRPY=False,
                 useXYZ=True,
                 scale=1,
                 viewModel=None):

        self.name = name
        self.color = color
        self.wireframe = wireframe
        self.pathColor = pathColor
        self.position = position
        self.attitude = attitude
        self.alpha = alpha
        self.useRPY = useRPY
        self.useXYZ = useXYZ
        self.tracked = tracked
        self.active = active
        self.scale = scale
        self.viewModel = viewModel
        self.id = CesiumEntity.next_id
        CesiumEntity.next_id += 1


    @classmethod
    def fromJson(cls, json):
        name = json['name']
        position = json['position']
        attitude = json['attitude']
        if "alpha" in json:
            alpha = json['alpha']
        else:
            alpha = 1

        if "useRPY" in json:
            useRPY = json['useRPY']
        else:
            useRPY = False

        if "useXYZ" in json:
            useXYZ = json['useXYZ']
        else:
            useXYZ = True

        if "viewModel" in json:
            viewModel = json['viewModel']
        else:
            viewModel = None

        if "pathColor" in json:
            pathColor = json['pathColor']
        else:
            pathColor = "blue"

        if "color" in json:
            color = json['color']
        else:
            color = "white"


        if "wireframe" in json:
            wireframe = json['wireframe']
        else:
            wireframe = False

        if "tracked" in json:
            tracked = json['tracked']
        else:
            tracked = True

        if "active" in json:
            active = json['active']
        else:
            active = True

        if "scale" in json:
            scale = json['scale']
        else:
            scale = 1

        return cls(
                   name=name,
                   color=color,
                   wireframe=wireframe,
                   pathColor=pathColor,
                   position=position,
                   attitude=attitude,
                   alpha=alpha,
                   useRPY=useRPY,
                   useXYZ=useXYZ,
                   tracked=tracked,
                   active=active,
                   scale=scale,
                   viewModel=viewModel)

    def toJson(self):
        return({"id": self.id,
                "name": self.name,
                "color": self.color,
                "wireframe": self.wireframe,
                "pathColor": self.pathColor,
                "alpha": self.alpha,
                "useXYZ": self.useXYZ,
                "useRPY": self.useRPY,
                "tracked": self.tracked,
                "active": self.active,
                "scale": self.scale,
                "position": self.position,
                "attitude": self.attitude
                })