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

#include <ProToolkit.h>
#include <ProMenuBar.h>
#include <ProUtil.h> 
#include <ProMessage.h>
#include <ProBrowser.h>
#include <ProWTUtils.h>
#include <ProWorkspace.h>
#include <ProCore.h>

#include <PTWCServer.h>

ProFileName  message_file;

#define POPULATE_MODE_FLAG "populate"
#define REGFILE_FLAG "regfile"

uiCmdAccessState PTTestAccessDefault ()
{
	return ACCESS_AVAILABLE;
}

/*====================================================================*\
  FUNCTION :   user_initialize()
  PURPOSE  :   Application initialization	
\*====================================================================*/
int user_initialize(int argc, char* argv[])
{
	ProBoolean populateMode = PRO_B_FALSE;
	int i;
	uiCmdCmdId cmd_id;
	char initFile [PRO_FILE_NAME_SIZE];

	PT_TEST_LOG_INIT

/*--------------------------------------------------------------------*\
	Set the default initialization file name
\*--------------------------------------------------------------------*/
	strcpy (initFile, "pt_wc_server_init.dat");

/*--------------------------------------------------------------------*\
	Parse command line
\*--------------------------------------------------------------------*/
	if (argc > 1)
	{
		for (i = 1; i < argc; i++)
		{
			char* flagString;
			char* flagInitFile = NULL;
			int loc;
/*--------------------------------------------------------------------*\
	Skip the '+' used to signal this argument to Pro/TOOLKIT
\*--------------------------------------------------------------------*/
			flagString = argv [i] + 1;
			if (strcmp (flagString, POPULATE_MODE_FLAG)== 0)
			{
				populateMode = PRO_B_TRUE;
			}
			if (strncmp (flagString, REGFILE_FLAG, strlen (REGFILE_FLAG)) == 0)
			{
				flagInitFile = strchr (flagString, '=');
				strcpy (initFile, flagInitFile + 1);
			}
		}
	}

/*--------------------------------------------------------------------*\
	Run populate mode, this method will exit Pro/E after its complete
\*--------------------------------------------------------------------*/
	if (populateMode)
	{
		PTWCUtilSetInteractive (PRO_B_FALSE);
		return (PTWCPopulateServer (initFile));
	}


  ProStringToWstring (message_file_init, "pt_wc_server.txt" ); 

/*---------------------------------------------------------------------*\
Add the application main menu
\*---------------------------------------------------------------------*/
  status = ProMenubarMenuAdd ("PTWCServer", "PTWCServerLabel", "Info",
			      PRO_B_TRUE, message_file_init );
  PT_TEST_LOG_SUCC ("ProMenubarMenuAdd()");


/*---------------------------------------------------------------------*\
Add the button for creating and checking in the BOM file
\*---------------------------------------------------------------------*/
  status = ProCmdActionAdd("PTWCServer.CreateBOM", 
				(uiCmdCmdActFn)PTWCCreateOrUpdateDXF,
			   uiProe2ndImmediate, PTWCAccessCreateOrUpdateDXF,
			   PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  PT_TEST_LOG_SUCC ("ProCmdActionAdd()");
  
  status = ProMenubarmenuPushbuttonAdd(
				       "PTWCServer", "PTWCCreateUpdateDXF", 
				       "PTWCCreateUpdateDXF-Label", 
				       "PTWCCreateUpdateDXF-Help",
				       NULL, PRO_B_TRUE, cmd_id, message_file_init);
  PT_TEST_LOG_SUCC ("ProMenubarmenuPushbuttonAdd()");
  
/*---------------------------------------------------------------------*\
Add the button for creating and checking in the ProductView OL files as
secondary content
\*---------------------------------------------------------------------*/
  status = ProCmdActionAdd("PTWCServer.PartToPView", 
				(uiCmdCmdActFn)PTWCPartsToProductView,
			   uiProe2ndImmediate, PTWCAccessPartToPView,
			   PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  PT_TEST_LOG_SUCC ("ProCmdActionAdd()");
  
  status = ProMenubarmenuPushbuttonAdd(
				       "PTWCServer", "PTWCPartToPView", 
				       "PTWCPartToPView-Label", 
				       "PTWCPartToPView-Help",
				       NULL, PRO_B_TRUE, cmd_id, message_file_init);
  PT_TEST_LOG_SUCC ("ProMenubarmenuPushbuttonAdd()");

/*---------------------------------------------------------------------*\
Add the button for automatic addition of a family table instance.
\*---------------------------------------------------------------------*/
  status = ProCmdActionAdd("PTWCServer.AddInstance", 
				(uiCmdCmdActFn)PTWCAddInstance,
			   uiProe2ndImmediate, PTWCAccessAddInstance,
			   PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  PT_TEST_LOG_SUCC ("ProCmdActionAdd()");
  
  status = ProMenubarmenuPushbuttonAdd(
				       "PTWCServer", "PTWCAddInstance", 
				       "PTWCAddInstance-Label", 
				       "PTWCAddInstance-Help",
				       NULL, PRO_B_TRUE, cmd_id, message_file_init);
  PT_TEST_LOG_SUCC ("ProMenubarmenuPushbuttonAdd()");


  return(0);
}

void user_terminate()
{
	PT_TEST_LOG_CLOSE
}