// 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

#include "xfa/fxfa/fm2js/xfa_fm2jsapi.h"

#include "core/fxcrt/include/fx_basic.h"
#include "xfa/fxfa/fm2js/xfa_fm2jscontext.h"
#include "xfa/fxfa/fm2js/xfa_program.h"
#include "xfa/fxfa/parser/xfa_document.h"

#ifdef __cplusplus
extern "C" {
#endif

int32_t XFA_FM2JS_Translate(const CFX_WideStringC& wsFormcalc,
                            CFX_WideTextBuf& wsJavascript,
                            CFX_WideString& wsError) {
  if (wsFormcalc.IsEmpty()) {
    wsJavascript.Clear();
    wsError.Empty();
    return 0;
  }
  int32_t status = 0;
  CXFA_FMProgram program;
  status = program.Init(wsFormcalc);
  if (status) {
    wsError = program.GetError().message;
    return status;
  }
  status = program.ParseProgram();
  if (status) {
    wsError = program.GetError().message;
    return status;
  }
  program.TranslateProgram(wsJavascript);
  return 0;
}
XFA_HFM2JSCONTEXT XFA_FM2JS_ContextCreate() {
  return (XFA_HFM2JSCONTEXT)CXFA_FM2JSContext::Create();
}
void XFA_FM2JS_ContextInitialize(XFA_HFM2JSCONTEXT hFM2JSContext,
                                 FXJSE_HRUNTIME hScriptRuntime,
                                 FXJSE_HCONTEXT hScriptContext,
                                 CXFA_Document* pDocument) {
  CXFA_FM2JSContext* pContext =
      reinterpret_cast<CXFA_FM2JSContext*>(hFM2JSContext);
  pContext->Initialize(hScriptRuntime, hScriptContext, pDocument);
}
void XFA_FM2JS_GlobalPropertyGetter(XFA_HFM2JSCONTEXT hFM2JSContext,
                                    FXJSE_HVALUE hValue) {
  CXFA_FM2JSContext* pContext =
      reinterpret_cast<CXFA_FM2JSContext*>(hFM2JSContext);
  pContext->GlobalPropertyGetter(hValue);
}
void XFA_FM2JS_ContextRelease(XFA_HFM2JSCONTEXT hFM2JSContext) {
  CXFA_FM2JSContext* pContext =
      reinterpret_cast<CXFA_FM2JSContext*>(hFM2JSContext);
  pContext->Release();
}
#ifdef __cplusplus
}
#endif