# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License").
# You may not use this file except in compliance with the License.
# A copy of the License is located at
#
#  http://aws.amazon.com/apache2.0
#
# or in the "license" file accompanying this file. This file 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.

"""Launch a lifecycle cloudwatch_logger node"""

import os
import yaml

import launch
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():
    default_config = os.path.join(get_package_share_directory('cloudwatch_logger'), 'config', 'sample_configuration.yaml')
    with open(default_config, 'r') as f:
        config_text = f.read()
    config_yaml = yaml.safe_load(config_text)
    default_log_group_name = config_yaml['cloudwatch_logger']['ros__parameters']['log_group_name']
    default_aws_region = config_yaml['cloudwatch_logger']['ros__parameters']['aws_client_configuration']['region']

    parameters = [launch.substitutions.LaunchConfiguration("config_file")]
    parameters.append({"log_group_name": launch.substitutions.LaunchConfiguration("log_group_name")})
    parameters.append({"aws_client_configuration": { "region": launch.substitutions.LaunchConfiguration("aws_region") }})
  
    return LaunchDescription([
        launch.actions.DeclareLaunchArgument(
            "node_name",
            default_value="cloudwatch_logger",
        ),
        launch.actions.DeclareLaunchArgument(
            "config_file",
            default_value=default_config
        ),
        launch.actions.DeclareLaunchArgument(
            "aws_region",
            default_value=default_aws_region
        ),
        launch.actions.DeclareLaunchArgument(
            "log_group_name",
            default_value=default_log_group_name
        ),
        Node(
            package='cloudwatch_logger',
            node_executable='cloudwatch_logger',
            node_name=launch.substitutions.LaunchConfiguration('node_name'),
            parameters=parameters,
            # workaround until https://github.com/ros2/rmw_fastrtps/issues/265 is resolved
            arguments=["__log_disable_rosout:=true"],
            output='screen'
        ),
    ])