// Copyright 2014 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_INCLUDE_JAVASCRIPT_REPORT_H_
#define FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_

#include "JS_Define.h"

class Report : public CJS_EmbedObj {
 public:
  Report(CJS_Object* pJSObject);
  ~Report() override;

 public:
  FX_BOOL save(IFXJS_Context* cc,
               const CJS_Parameters& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
  FX_BOOL writeText(IFXJS_Context* cc,
                    const CJS_Parameters& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
};

class CJS_Report : public CJS_Object {
 public:
  CJS_Report(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
  ~CJS_Report() override {}

 public:
  DECLARE_JS_CLASS(CJS_Report);

  JS_STATIC_METHOD(save, Report)
  JS_STATIC_METHOD(writeText, Report);
};

#endif  // FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_
