#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Copyright 2024 HHCM, Istituto Italiano di Tecnologia
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys
import rclpy
from gazebo_msgs.srv import SpawnEntity


def main(args=None):
    rclpy.init(args=args)
    node = rclpy.create_node("nicla_spawner")
    cli = node.create_client(SpawnEntity, "/nicla_spawner")

    content = sys.argv[1]

    req = SpawnEntity.Request()
    req.name = "nicla"
    req.xml = content
    req.robot_namespace = ""
    req.reference_frame = "world"

    while not cli.wait_for_service(timeout_sec=1.0):
        node.get_logger().info("service not available, waiting again...")

    future = cli.call_async(req)
    rclpy.spin_until_future_complete(node, future)

    if future.result() is not None:
        node.get_logger().info(
            "Result "
            + str(future.result().success)
            + " "
            + future.result().status_message
        )
    else:
        node.get_logger().info(
            "Service call failed %r" % (future.exception(),)
        )

    node.destroy_node()
    rclpy.shutdown()


if __name__ == "__main__":
    main()
