// Copyrigth Xtooltech @ 2023- All rights reserved.(LXH)

#ifndef __STATIONDATAMODULE_HPP__
#define __STATIONDATAMODULE_HPP__

#include "JsonSerializable.hpp"
#include "StationDataItem.hpp"
#include <string>
#include <vector>

namespace otx {
namespace jidu {

class StationDataCategory;
/**
 * @brief 测试大项中的模块(Block)，对应配置文件中的function。
 *
 */
class StationDataBlock :virtual public JsonSerializable {
public:
  StationDataBlock();
  StationDataBlock(const StationDataBlock &) = default;
  StationDataBlock &operator=(const StationDataBlock &) = default;
  virtual ~StationDataBlock();

private:
  std::string mTestStatisticName;
  std::string mTestStatisticId;
  std::string mTestBlockName;
  std::string mTestBlockId;
  std::string mTestBlockResult;
  std::vector<std::string> mFailReason;
  std::vector<StationDataItem*> mTestItemList;
  // 不出现在报告中。
  std::string mBeginTime;
  std::string mEndTime;
  std::string mState;
  StationDataCategory *mCategory;

public:
  virtual std::string getTestStatisticName();
  virtual void setTestStatisticName(const std::string &v);

  virtual std::string getTestStatisticId();
  virtual void setTestStatisticId(const std::string &v);

  virtual std::string getTestBlockName();
  virtual void setTestBlockName(const std::string &v);

  virtual std::string getTestBlockId();
  virtual void setTestBlockId(const std::string &v);

  virtual std::string getTestBlockResult();
  virtual void setTestBlockResult(const std::string &v);

  virtual std::vector<std::string>* getFailReason();
  virtual void addFailReason(const std::string &v);

  virtual std::vector<StationDataItem *>* getTestItemList();
  virtual StationDataItem* newTestItem();
  virtual StationDataItem *getTestItemById(const std::string &v);
  virtual StationDataItem *getTestItemByName(const std::string &v);

  virtual std::string toJsonString() override;

  virtual std::string getBeginTime();
  virtual void setBeginTime(const std::string &v);

  virtual std::string getEndTime();
  virtual void setEndTime(const std::string &v);

  virtual std::string getState();
  virtual void updateState();

  virtual StationDataCategory *getCategory();
  virtual void setCategory(StationDataCategory *v);
};

} // namespace jidu
} // namespace otx

#endif /* __STATIONDATAMODULE_HPP__ */
