+# # Message bus data initialization
+# self.state.set_default(message_host=None)
+# self.state.set_default(message_port=None)
+
+# # Database data initialization
+# self.state.set_default(database_uri=None)
+
+# # RO data initialization
+# self.state.set_default(ro_host=None)
+# self.state.set_default(ro_port=None)
+
+# self.port = LCM_PORT
+# self.image = OCIImageResource(self, "image")
+
+# # Registering regular events
+# self.framework.observe(self.on.start, self.configure_pod)
+# self.framework.observe(self.on.config_changed, self.configure_pod)
+# self.framework.observe(self.on.upgrade_charm, self.configure_pod)
+
+# # Registering custom internal events
+# self.framework.observe(self.on.configure_pod, self.configure_pod)
+
+# # Registering required relation events
+# self.framework.observe(
+# self.on.kafka_relation_changed, self._on_kafka_relation_changed
+# )
+# self.framework.observe(
+# self.on.mongodb_relation_changed, self._on_mongodb_relation_changed
+# )
+# self.framework.observe(
+# self.on.ro_relation_changed, self._on_ro_relation_changed
+# )
+
+# # Registering required relation broken events
+# self.framework.observe(
+# self.on.kafka_relation_broken, self._on_kafka_relation_broken
+# )
+# self.framework.observe(
+# self.on.mongodb_relation_broken, self._on_mongodb_relation_broken
+# )
+# self.framework.observe(
+# self.on.ro_relation_broken, self._on_ro_relation_broken
+# )
+
+# def _on_kafka_relation_changed(self, event: EventBase) -> NoReturn:
+# """Reads information about the kafka relation.
+
+# Args:
+# event (EventBase): Kafka relation event.
+# """
+# message_host = event.relation.data[event.unit].get("host")
+# message_port = event.relation.data[event.unit].get("port")
+
+# if (
+# message_host
+# and message_port
+# and (
+# self.state.message_host != message_host
+# or self.state.message_port != message_port
+# )
+# ):
+# self.state.message_host = message_host
+# self.state.message_port = message_port
+# self.on.configure_pod.emit()
+
+# def _on_kafka_relation_broken(self, event: EventBase) -> NoReturn:
+# """Clears data from kafka relation.
+
+# Args:
+# event (EventBase): Kafka relation event.
+# """
+# self.state.message_host = None
+# self.state.message_port = None
+# self.on.configure_pod.emit()
+
+# def _on_mongodb_relation_changed(self, event: EventBase) -> NoReturn:
+# """Reads information about the DB relation.
+
+# Args:
+# event (EventBase): DB relation event.
+# """
+# database_uri = event.relation.data[event.unit].get("connection_string")
+
+# if database_uri and self.state.database_uri != database_uri:
+# self.state.database_uri = database_uri
+# self.on.configure_pod.emit()
+
+# def _on_mongodb_relation_broken(self, event: EventBase) -> NoReturn:
+# """Clears data from mongodb relation.
+
+# Args:
+# event (EventBase): DB relation event.
+# """
+# self.state.database_uri = None
+# self.on.configure_pod.emit()
+
+# def _on_ro_relation_changed(self, event: EventBase) -> NoReturn:
+# """Reads information about the RO relation.
+
+# Args:
+# event (EventBase): Keystone relation event.
+# """
+# ro_host = event.relation.data[event.unit].get("host")
+# ro_port = event.relation.data[event.unit].get("port")
+
+# if (
+# ro_host
+# and ro_port
+# and (self.state.ro_host != ro_host or self.state.ro_port != ro_port)
+# ):
+# self.state.ro_host = ro_host
+# self.state.ro_port = ro_port
+# self.on.configure_pod.emit()
+
+# def _on_ro_relation_broken(self, event: EventBase) -> NoReturn:
+# """Clears data from ro relation.
+
+# Args:
+# event (EventBase): Keystone relation event.
+# """
+# self.state.ro_host = None
+# self.state.ro_port = None
+# self.on.configure_pod.emit()
+
+# def _missing_relations(self) -> str:
+# """Checks if there missing relations.
+
+# Returns:
+# str: string with missing relations
+# """
+# data_status = {
+# "kafka": self.state.message_host,
+# "mongodb": self.state.database_uri,
+# "ro": self.state.ro_host,
+# }
+
+# missing_relations = [k for k, v in data_status.items() if not v]
+
+# return ", ".join(missing_relations)
+
+# @property
+# def relation_state(self) -> Dict[str, Any]:
+# """Collects relation state configuration for pod spec assembly.
+
+# Returns:
+# Dict[str, Any]: relation state information.
+# """
+# relation_state = {
+# "message_host": self.state.message_host,
+# "message_port": self.state.message_port,
+# "database_uri": self.state.database_uri,
+# "ro_host": self.state.ro_host,
+# "ro_port": self.state.ro_port,
+# }
+
+# return relation_state
+
+# def configure_pod(self, event: EventBase) -> NoReturn:
+# """Assemble the pod spec and apply it, if possible.
+
+# Args:
+# event (EventBase): Hook or Relation event that started the
+# function.
+# """
+# if missing := self._missing_relations():
+# self.unit.status = BlockedStatus(
+# "Waiting for {0} relation{1}".format(
+# missing, "s" if "," in missing else ""
+# )
+# )
+# return
+
+# if not self.unit.is_leader():
+# self.unit.status = ActiveStatus("ready")
+# return
+
+# self.unit.status = MaintenanceStatus("Assembling pod spec")
+
+# # Fetch image information
+# try:
+# self.unit.status = MaintenanceStatus("Fetching image information")
+# image_info = self.image.fetch()
+# except OCIImageResourceError:
+# self.unit.status = BlockedStatus("Error fetching image information")
+# return
+
+# try:
+# pod_spec = make_pod_spec(
+# image_info,
+# self.model.config,
+# self.relation_state,
+# self.model.app.name,
+# self.port,
+# )
+# except ValueError as exc:
+# logger.exception("Config/Relation data validation error")
+# self.unit.status = BlockedStatus(str(exc))
+# return
+
+# if self.state.pod_spec != pod_spec:
+# self.model.pod.set_spec(pod_spec)
+# self.state.pod_spec = pod_spec
+
+# self.unit.status = ActiveStatus("ready")
+
+
+# if __name__ == "__main__":
+# main(LcmCharm)