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


/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProMenu.h>
#include <ProNcseq.h>
#include <ProElement.h>
#include <ProModelitem.h>
#include <ProNcseqElem.h>
#include <ProFeature.h>
#include <ProSolid.h>
#include <ProElemId.h>
#include <ProFeatType.h>

/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "UtilString.h"
#include "UtilGeom.h"
#include "TestError.h"
#include "TestConsts.h"
#include "MfgMenu.h"
#include <ProTKRunTime.h>

/*====================================================================*\
FUNCTION : ProTestNCSequenceCreate
PURPOSE  : ProTestNCSequenceCreate
\*====================================================================*/
ProError ProTestNCSequenceCreate(MfgMenuChoice *obj_action)
{
    static char *menu[] = {"TkMfgNCSeq","TkMfgNCDQ",""};
    ProError     status = PRO_TK_NO_ERROR;
    int          nc_type, done_quit;
    int		id;

    int ProTestChooseNCSeqType(int *nc_type, int opt);
    int ProTestNCSeqDQ(int *done_quit, int opt);


    nc_type = PRO_NCSEQ_CONV_SURF_MILL;

    status = ProMenuPush();
    TEST_CALL_REPORT ("ProMenuPush", "ProTestNCSequenceCreate", status,
        status != PRO_TK_NO_ERROR);

    status = ProMenuFileRegister((char*)"TkMfgNCSeq",(char*)"tkmfgncseq.mnu", &id);
    TEST_CALL_REPORT ("ProMenuFileRegister", "ProTestNCSequenceCreate", status,
        status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCSeq",(char*)"TkMfgNCSeq", (ProMenubuttonAction)ProMenuHold,NULL,0);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCSeq",(char*)"-ConvMill",
                       (ProMenubuttonAction)ProTestChooseNCSeqType, &nc_type, PRO_NCSEQ_CONV_SURF_MILL);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCSeq",(char*)"-FaceMill",
                       (ProMenubuttonAction)ProTestChooseNCSeqType, &nc_type, PRO_NCSEQ_FACE_MILL);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCSeq",(char*)"-HoleMake",
                       (ProMenubuttonAction)ProTestChooseNCSeqType, &nc_type, PRO_NCSEQ_HOLEMAKING);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenuDatamodeSet((char*)"TkMfgNCSeq", (ProBoolean)0);
    TEST_CALL_REPORT ("ProMenuDatamodeSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);

    status = ProMenuFileRegister((char*)"TkMfgNCDQ",(char*)"tkmfgncdq.mnu", &id);
    TEST_CALL_REPORT ("ProMenuFileRegister", "ProTestNCSequenceCreate", status,
        status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCDQ",(char*)"TkMfgNCDQ", (ProMenubuttonAction)ProMenuHold,NULL,0);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCDQ",(char*)"Done",
                       (ProMenubuttonAction)ProTestNCSeqDQ, &done_quit, MFGTK_DONE);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActionSet((char*)"TkMfgNCDQ",(char*)"Quit",
                       (ProMenubuttonAction)ProTestNCSeqDQ, &done_quit, MFGTK_QUIT);
    TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);

    status = ProCompoundmenuCreate(menu, &id);
    TEST_CALL_REPORT ("ProCompoundmenuCreate", "ProTestNCSequenceCreate",
        status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonHighlight((char*)"TkMfgNCSeq",(char*)"-ConvMill");
    TEST_CALL_REPORT ("ProMenubuttonHighlight", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);
    status = ProMenuProcess(menu[0], &id);
    TEST_CALL_REPORT ("ProMenuProcess", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);

    if( done_quit == MFGTK_QUIT )
    {
        status = ProMenuPop();
        TEST_CALL_REPORT("ProMenuPop", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenubuttonUnhighlight((char*)"TkMfgDQ",(char*)"Done");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);
        return((ProError)0);
    }


     switch(nc_type)
     {
      case PRO_NCSEQ_CONV_SURF_MILL:
        ProTKPrintf((char*)"PRO_NCSEQ_CONV_SURF_MILL\n");
        break;

      case PRO_NCSEQ_FACE_MILL:
        ProTKPrintf((char*)"PRO_NCSEQ_FACE_MILL\n");
        break;

      case PRO_NCSEQ_HOLEMAKING:
        ProTKPrintf((char*)"PRO_NCSEQ_HOLEMAKING\n");
        break;

      default:
        break;
     }

        /* Return to previous menu. */
    status = ProMenuPop();
    TEST_CALL_REPORT ("ProMenuPop", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonUnhighlight((char*)"TkMfgDQ",(char*)"Done");
    TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);
    status = ProMenubuttonActivate((char*)"TkMfgAct",(char*)"-Redefine");
    TEST_CALL_REPORT ("ProMenubuttonActivate", "ProTestNCSequenceCreate",
           status, status != PRO_TK_NO_ERROR);

    return ((ProError)1);
}




/*====================================================================*\
FUNCTION : ProTestChooseNCSeqType
PURPOSE  : ProTestChooseNCSeqType
\*====================================================================*/
int ProTestChooseNCSeqType(int *nc_type, int opt)
{
     ProError status;
     switch(opt)
     {
      case PRO_NCSEQ_CONV_SURF_MILL:
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-FaceMill");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-HoleMake");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenubuttonHighlight((char*)"TkMfgNCSeq",(char*)"-ConvMill");
        TEST_CALL_REPORT ("ProMenubuttonHighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
           *nc_type = PRO_NCSEQ_CONV_SURF_MILL;
        break;

      case PRO_NCSEQ_FACE_MILL:
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-ConvMill");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-HoleMake");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);

        status = ProMenubuttonHighlight((char*)"TkMfgNCSeq",(char*)"-FaceMill");
        TEST_CALL_REPORT ("ProMenubuttonHighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
           *nc_type = PRO_NCSEQ_FACE_MILL;
        break;

      case PRO_NCSEQ_HOLEMAKING:
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-ConvMill");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenubuttonUnhighlight((char*)"TkMfgNCSeq",(char*)"-FaceMill");
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);

        status = ProMenubuttonHighlight((char*)"TkMfgNCSeq",(char*)"-HoleMake");
        TEST_CALL_REPORT ("ProMenubuttonHighlight", "ProTestNCSeqType",
           status, status != PRO_TK_NO_ERROR);
           *nc_type = PRO_NCSEQ_HOLEMAKING;
        break;

      default:
        break;
     }
  return(0);
}



/*====================================================================*\
FUNCTION : ProTestNCSeqDQ
PURPOSE  : ProTestNCSeqDQ
\*====================================================================*/
int ProTestNCSeqDQ(int *done_quit, int opt)
{
     ProError status;
     switch(opt)
     {
     case MFGTK_DONE:
        status = ProMenuDelete();
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqDQ",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenuDelete();
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqDQ",
           status, status != PRO_TK_NO_ERROR);
        *done_quit = MFGTK_DONE;
        break;

     case MFGTK_QUIT:
        status = ProMenuDelete();
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqDQ",
           status, status != PRO_TK_NO_ERROR);
        status = ProMenuDelete();
        TEST_CALL_REPORT ("ProMenubuttonUnhighlight", "ProTestNCSeqDQ",
           status, status != PRO_TK_NO_ERROR);
        *done_quit = MFGTK_QUIT;
        break;

      default:
        break;
     }

  return(0);
}