//---------------------------------------------------------------------------
#ifndef TCommandLineParserH
#define TCommandLineParserH
//---------------------------------------------------------------------------
#include <system.hpp>
#include <Classes.hpp>

#include "TCFbESimilarityComputationAlgorithm.h"
#include "TCFbEPredictionAlgorithm.h"

#include "TCFbECosineSimilarity.h"
#include "TCFbEAdjustedCosineSimilarityWithAverage.h"
#include "TCFbEAdjustedCosineSimilarityWithMedian.h"
#include "TCFbECorrelationCoefficientWithAverage.h"
#include "TCFbECorrelationCoefficientWithMedian.h"
#include "TCFbERankCorrelation.h"
#include "TCFbEDistanceSimilarityWithAverage.h"
#include "TCFbEDistanceSimilarityWithMedian.h"

#include "TCFbEWeightedSum.h"
#include "TCFbEAdjustedWeightedSumWithAverageOfColumn.h"
#include "TCFbEAdjustedWeightedSumWithMedianOfColumn.h"
#include "TCFbEAdjustedWeightedSumWithAverageOfNeighbors.h"
#include "TCFbEAdjustedWeightedSumWithMedianOfNeighbors.h"
#include "TCFbEAdjustedWeightedSumWithAverageOfRow.h"
#include "TCFbEAdjustedWeightedSumWithMedianOfRow.h"
#include "TCFbEAmplifiedWeightedSumWithAveragedMultiplier.h"
#include "TCFbEAmplifiedWeightedSumWithMedianOfMultiplier.h"
#include "TCFbEAmplifiedWeightedSumWithWeightedMultiplier.h"
//---------------------------------------------------------------------------
class TCommandLineParser : public TObject
{
public:
    virtual __fastcall TCommandLineParser(int argc=0, char* argv[]=NULL);    // コンストラクタ
    __fastcall ~TCommandLineParser();    // デストラクタ

    TFileName    LearningDataFileName;
    TFileName    EstimatingDataFileName;
    TCFbESimilarityComputationAlgorithm*    SimilarityComputationAlgorithm;
    TCFbEPredictionAlgorithm*    PredictionAlgorithm;
    TCFbEValueBase    ValueBase;
    TCFbEAlgorithmBase    AlgorithmBase;
    int    NeighborsSize;
    TStringList*    TargetColumnLabelList;
    bool    NLabelEnabled;            // Neighborhoods のラベルを表示するかどうか
    bool    NSimilaritiesEnabled;    // Neighborhoods の類似度を表示するかどうか
    bool    SDistributionEnabled;     // 類似度の分布を表示するかどうか
    TFileName    OutputFileName;

protected:
    TStringList* FOptionList;
    virtual bool __fastcall IsEmpty(void);    // オプションがない
    virtual bool __fastcall IsEnableOption(AnsiString OptionLabel0, AnsiString OptionLabel1);    // OptionLabel0, OptionLabel1 のどちらかが OptionList に含まれていれば返す
    virtual bool __fastcall IsEnableValue(AnsiString OptionLabel0, AnsiString OptionLabel1);    // OptionLabel0, OptionLabel1 のどちらかと OptionLabel=文字列 という形式で関連付けられた文字列があれば true を返す
    virtual AnsiString __fastcall GetValueString(AnsiString OptionLabel0, AnsiString OptionLabel1);    // OptionLabel0, OptionLabel1 のどちらかと OptionLabel=文字列 という形式で関連付けられた文字列が OptionList にあれば返す

    virtual TCFbESimilarityComputationAlgorithm* __fastcall GetSimilarityComputationAlgorithm(AnsiString AlgorithmName);
    virtual TCFbEPredictionAlgorithm* __fastcall GetPredictionAlgorithm(AnsiString AlgorithmName, int NeighborsSize);

private:

};
//---------------------------------------------------------------------------
#endif
