#!/usr/bin/env python3

# Copyright(c)[2025][AGIROS][TravoDDS] is licensed under Mulan PSL v2.
#
# You can use this software according to the terms and conditions of
# the Mulan PSL v2.You may obtain a copy of Mulan PSL v2 at :
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF
# ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
#
# See the Mulan PSL v2 for more details.

import argparse
import os
import sys

from rosidl_cmake import read_generator_arguments
from rosidl_typesupport_travodds_c import generate_ros_c
from rosidl_typesupport_travodds_c import generate_travodds_c

def is_valid_file(parser, file_name):
    if not os.path.exists(file_name):
        parser.error("File does not exist: '{0}'".format(file_name))
    file_name_abs = os.path.abspath(file_name)
    if not os.path.isfile(file_name_abs):
        parser.error("Path exists but is not a file: '{0}'".format(file_name_abs))
    return file_name


def main(argv=sys.argv[1:]):
    parser = argparse.ArgumentParser(
        description='Generate the C interfaces for travodds.',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
        '--generator-arguments-file',
        required=True,
        help='The location of the file containing the generator arguments')

    args = parser.parse_args(argv)

    # generate ros2 realted src
    generate_ros_c(args.generator_arguments_file)
    # generate travodds specific src
    generator_args = read_generator_arguments(args.generator_arguments_file)

    depend_args = None
    if 'ros_interface_dependencies' in generator_args:
        depend_args = generator_args['ros_interface_dependencies']
    include_args = None
    if 'include_paths' in generator_args:
        include_args = generator_args['include_paths']

    generate_travodds_c(
        generator_args['package_name'],
        generator_args['additional_files'],
        generator_args['output_dir'],
        depend_args,
        include_args)
    

if __name__ == '__main__':
    sys.exit(main())
