/*=============================================================================
          Copyright 2018.
Siemens Product Lifecycle Management Software Inc.
All Rights Reserved.
===============================================================================
  File description:

  File name: CrfCumParamStruct.hxx
  Module   : qry

=============================================================================*/

#ifndef  CRFCUMPARAMSTRUCT_HXX             /*  if not already included  */
#define  CRFCUMPARAMSTRUCT_HXX


#include <qry/libqry_exports.h>

/*
use polymorphism here, so in future when we need add new parameters, just add a new type and custom ITK still works
*/
struct CUMITKINPUTBASE
{
    const char* method_name;    /**< Name of method selected by user.*/
    const char* release_status; /**< The release status value.*/
    const int objs_num;         /**< Number of selected objects.*/
    const tag_t* n_objs;        /**< This holds tags of all selected objects.*/
    const tag_t ss_tag;         /**< Tag for selected stylesheet.*/
    logical isCustomLib;        /**< Flag to indicate if executing from OOTB or Custom library.*/
    virtual void emptyOp(){}

    CUMITKINPUTBASE( const char*name,const char*rs,const int num,const tag_t* objs,const tag_t ss):method_name(name),release_status(rs),objs_num(num),n_objs(objs),ss_tag(ss){}
};

struct CUMITKINPUT_A : CUMITKINPUTBASE
{
    const char* dataset_name; /**< Name of the dataset user has entered.*/
    logical dataset_created;  /**< This indicates dataset is created by custom ITK.*/
    logical applyst;          /**< This indicates stylesheet is applied by custom ITK.*/

    CUMITKINPUT_A(const char*name,const char*rs,const int num,const tag_t* objs,const tag_t ss,const char* dt):CUMITKINPUTBASE(name,rs,num,objs,ss),dataset_name(dt){}    
};

struct CUMITKINPUT_B : CUMITKINPUT_A
{
    const char* report_locale; /**< ID of the locale selected by user. For English value will be en_US, German will have de_DE.*/
    
    CUMITKINPUT_B(const char*name,const char*rs,const int num,const tag_t* objs,const tag_t ss,const char* dt,const char* rl):CUMITKINPUT_A(name,rs,num,objs,ss,dt),report_locale(rl){}
};

struct CUMITKINPUT_C : CUMITKINPUT_B
{
    int n_report_options;        /**< Number of the user options.*/
    char** report_option_names;  /**< n_report_options Custom Report UI enables users to include additional options. This holds all user entered option names.*/
    char** report_option_values; /**< n_report_options This holds values for all the report options.*/    

    CUMITKINPUT_C(const char*name,const char*rs,const int num,const tag_t* objs,const tag_t ss,const char* dt,const char* rl,char** rd_option_names, char** rd_option_values, int rd_options_count):CUMITKINPUT_B(name,rs,num,objs,ss,dt,rl),report_option_names(rd_option_names),report_option_values(rd_option_values),n_report_options(rd_options_count){}
};


#include <qry/libqry_undef.h>

#endif
