/*
	Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/


/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProMessage.h>
#include <ProUtil.h>

/*--------------------------------------------------------------------*\
System includes
\*--------------------------------------------------------------------*/
#include <stdarg.h>

/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "UtilMessage.h"
#include "UtilString.h"

/*====================================================================*\
    FUNCTION :  ProUtilMsgPrint()
    PURPOSE  :  Generalized form of ProMessageDisplay()
\*====================================================================*/
void ProUtilMsgPrint(
    const char *ftype,
    const char *title,
    ...)
{
    int i;
    char file[PRO_NAME_SIZE];
    wchar_t wstr[PRO_NAME_SIZE];
    void *a[10];
    va_list ap;

    ProUtilstrcpy(file, (const char *)ftype);
    ProUtilstrcat(file,"_msg.txt");

    va_start(ap, title);
    for(i=0;i<10;i++)
	a[i] = va_arg(ap, void*);

    ProMessageDisplay(ProStringToWstring(wstr, file),
		 (char*)title,
		 a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
    va_end(ap);
}

/*====================================================================*\
    FUNCTION :  ProUtilYesnoGet()
    PURPOSE  :  Ask for a yes/no answer from the user.
\*====================================================================*/
int ProUtilYesnoGet(
    char *def)      /* INPUT : default answer */
                    /* Return: 1 = yes, 0 = no */
{
    wchar_t wreply[4];
    char reply[4];

    while(1==1)
    {
        if(ProMessageStringRead(4, wreply))
            ProUtilstrcpy(reply,(const char *) def);
        else
            ProWstringToString(reply,wreply);
        ProUtilStringUpper(reply,reply);
        if(reply[0] == 'Y')
            return(1);
        if(reply[0] == 'N')
            return(0);
        ProUtilMsgPrint("gen","UTIL Please answer Y or N : ");
    }
    return (0);
}

/*====================================================================*\
    FUNCTION :	ProUtilIntGet()
    PURPOSE  :	Read a integer from the keyboard, given a default
\*====================================================================*/
int ProUtilIntGet(
    int range[2],	/* I - Min and Max values */
    int *def,		/* I - Default value - if NULL, default is QUIT */
    int *input)		/* O - The value read */
			/* Return 1 - a value was read,
				  0 - default was NULL and a <CR> was entered */
{
    int i;

    if(ProMessageIntegerRead(range, &i))
    {
	if(def == NULL)
	    return(0);

	*input = *def;
	return(1);
    }

    *input = i;
    return(1);
}

/*====================================================================*\
    FUNCTION :	ProUtilDoubleGet()
    PURPOSE  :	Read a double from the keyboard, given a default
\*====================================================================*/
int ProUtilDoubleGet(
    double range[2],	/* I - Min and Max values */
    double *def,	/* I - Default value - if NULL, default is QUIT */
    double *input)	/* O - The value read */
			/* Return 1 - a value was read,
				  0 - default was NULL and a <CR> was entered */
{
    double d;

    if(ProMessageDoubleRead(range, &d)!=0)
    {
	if(def == NULL)
	    return(0);

	*input = *def;
	return(1);
    }

    *input = d;
    return(1);
}


/*====================================================================*\
FUNCTION :  ProUtilStringGet
PURPOSE  :  Read a string from the keyboard, given a default
\*====================================================================*/
int ProUtilStringGet(wchar_t *p_wstr, wchar_t *p_default,  int max_len)
{
    wchar_t str[PRO_PATH_SIZE];

    if(ProMessageStringRead(max_len, str)!=0)
    {
        if (p_default == NULL)
    	    return (0);
	
    	ProUtilWstrcpy(p_wstr, p_default);
	return (1);
    }
    
    ProUtilWstrcpy(p_wstr, str);
    return (1);
}