#pragma once
#include "QData.hpp"


#include <json/json.h>
#include <jebase/config.h>

namespace qlibc{

	class JE_API QDataList : public QData {
    private:
        Json::Value* _list;

    public:
         explicit QDataList();
         QDataList(const QDataList& dl);
         explicit QDataList(const std::string& src);
         explicit QDataList(const Json::Value& value);
         explicit QDataList(const Json::Value* data);

        ~QDataList() override ;

        void setInitList(const Json::Value data);

         size_t getItemCount() const;

         void getItem(int idx,QData& ret) const;

         void appendItem(const QData &data);

        const Json::Value &asValueConst() const override;

        void appendItem(const Json::Value &value);

         void clear() override;

         bool isEmpty() const override;

         bool isDataList() const override {
			return true;
		}

         void printValue() const override;

         static QDataList makeDataListFromStringList(const str_vector& sl,const std::string& key);

         std::string toJSONString(bool lret = false) const override;
         void toJSONString(std::string& ret,bool lret = false) const override;

         bool loadFromFile(const std::string& fn) override;
         bool saveToFile(const std::string& fn, bool styled = true, const char* orders[]=nullptr) override;

         Json::Value &asValue() override;

        void removeItem(int i, Json::Value* val);
    };

}
