/*
** Copyright (C) 2001-2024 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/

#include "zbxbincommon.h"

#include "zbxstr.h"

/******************************************************************************
 *                                                                            *
 * Purpose: prints application parameters on stdout with layout suitable for  *
 *          80-column terminal                                                *
 *                                                                            *
 * Parameters:  progname      - [IN]                                          *
 *              usage_message - [IN]                                          *
 *                                                                            *
 ******************************************************************************/
void	zbx_print_usage(const char *progname, const char **usage_message)
{
#define ZBX_MAXCOL	79
#define ZBX_SPACE1	"  "			/* left margin for the first line */
#define ZBX_SPACE2	"               "	/* left margin for subsequent lines */
	const char	**p = usage_message;

	if (NULL != *p)
		printf("Usage:\n");

	while (NULL != *p)
	{
		size_t	pos;

		printf("%s%s", ZBX_SPACE1, progname);
		pos = ZBX_CONST_STRLEN(ZBX_SPACE1) + strlen(progname);

		while (NULL != *p)
		{
			size_t	len;

			len = strlen(*p);

			if (ZBX_MAXCOL > pos + len)
			{
				pos += len + 1;
				printf(" %s", *p);
			}
			else
			{
				pos = ZBX_CONST_STRLEN(ZBX_SPACE2) + len + 1;
				printf("\n%s %s", ZBX_SPACE2, *p);
			}

			p++;
		}

		printf("\n");
		p++;
	}
#undef ZBX_MAXCOL
#undef ZBX_SPACE1
#undef ZBX_SPACE2
}

static const char	help_message_footer[] =
	"Report bugs to: <https://support.zabbix.com>\n"
	"Zabbix home page: <https://www.zabbix.com>\n"
	"Documentation: <https://www.zabbix.com/documentation>";


/******************************************************************************
 *                                                                            *
 * Purpose: prints help of application parameters on stdout by application    *
 *          request with parameter '-h'                                       *
 *                                                                            *
 * Parameters: progname      - [IN]                                           *
 *             help_message  - [IN]                                           *
 *             usage_message - [IN]                                           *
 *             param         - [IN] pointer to modification parameter         *
 *                                                                            *
 ******************************************************************************/
void	zbx_print_help(const char *progname, const char **help_message, const char **usage_message, const char *param)
{
	const char	**p = help_message;

	zbx_print_usage(progname, usage_message);
	printf("\n");

	while (NULL != *p)
	{
		if (NULL != param && NULL != strstr(*p, "{DEFAULT_CONFIG_FILE}"))
		{
			char	*ptr;

			ptr = zbx_string_replace(*p++, "{DEFAULT_CONFIG_FILE}", param);
			printf("%s\n", ptr);
			zbx_free(ptr);
			continue;
		}

		printf("%s\n", *p++);
	}

	printf("\n");
	puts(help_message_footer);
}