// Copyright 2016 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_
#define FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_

#include <memory>
#include <vector>

#include "core/fxcrt/include/fx_basic.h"

enum class JS_GlobalDataType { NUMBER = 0, BOOLEAN, STRING, OBJECT, NULLOBJ };

class CJS_KeyValue;

class CJS_GlobalVariableArray {
 public:
  CJS_GlobalVariableArray();
  ~CJS_GlobalVariableArray();

  void Add(CJS_KeyValue* p);
  int Count() const;
  CJS_KeyValue* GetAt(int index) const;
  void Copy(const CJS_GlobalVariableArray& array);

 private:
  std::vector<std::unique_ptr<CJS_KeyValue>> m_Array;
};

class CJS_KeyValue {
 public:
  CJS_KeyValue();
  ~CJS_KeyValue();

  CFX_ByteString sKey;
  JS_GlobalDataType nType;
  double dData;
  bool bData;
  CFX_ByteString sData;
  CJS_GlobalVariableArray objData;
};

#endif  // FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_
