// 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);
	virtual ~Report();

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

class CJS_Report : public CJS_Object
{
public:
	CJS_Report(JSFXObject  pObject) : CJS_Object(pObject){};
	virtual ~CJS_Report(){};

public:
	DECLARE_JS_CLASS(CJS_Report);

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

#endif  // FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_
