// Copyright 2016 The PDFium Authors
// 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 XFA_FXFA_CXFA_EVENTPARAM_H_
#define XFA_FXFA_CXFA_EVENTPARAM_H_

#include "core/fxcrt/unowned_ptr.h"
#include "core/fxcrt/widestring.h"
#include "v8/include/cppgc/macros.h"
#include "xfa/fxfa/fxfa_basic.h"

enum XFA_EVENTTYPE : uint8_t {
  XFA_EVENT_Click,
  XFA_EVENT_Change,
  XFA_EVENT_DocClose,
  XFA_EVENT_DocReady,
  XFA_EVENT_Enter,
  XFA_EVENT_Exit,
  XFA_EVENT_Full,
  XFA_EVENT_IndexChange,
  XFA_EVENT_Initialize,
  XFA_EVENT_MouseDown,
  XFA_EVENT_MouseEnter,
  XFA_EVENT_MouseExit,
  XFA_EVENT_MouseUp,
  XFA_EVENT_PostExecute,
  XFA_EVENT_PostOpen,
  XFA_EVENT_PostPrint,
  XFA_EVENT_PostSave,
  XFA_EVENT_PostSign,
  XFA_EVENT_PostSubmit,
  XFA_EVENT_PreExecute,
  XFA_EVENT_PreOpen,
  XFA_EVENT_PrePrint,
  XFA_EVENT_PreSave,
  XFA_EVENT_PreSign,
  XFA_EVENT_PreSubmit,
  XFA_EVENT_Ready,
  XFA_EVENT_InitCalculate,
  XFA_EVENT_InitVariables,
  XFA_EVENT_Calculate,
  XFA_EVENT_Validate,
  XFA_EVENT_Unknown,
};

class CXFA_EventParam {
 public:
  explicit CXFA_EventParam(XFA_EVENTTYPE type);
  CXFA_EventParam(const CXFA_EventParam& other);
  ~CXFA_EventParam();

  CXFA_EventParam& operator=(const CXFA_EventParam& other);
  CXFA_EventParam& operator=(CXFA_EventParam&& other) noexcept;

  WideString GetNewText() const;

  XFA_EVENTTYPE m_eType;
  bool m_bCancelAction = false;
  bool m_bKeyDown = false;
  bool m_bModifier = false;
  bool m_bReenter = false;
  bool m_bShift = false;
  bool m_bIsFormReady = false;
  bool m_bTargeted = true;
  int32_t m_iCommitKey = 0;
  int32_t m_iSelEnd = 0;
  int32_t m_iSelStart = 0;
  WideString m_wsResult;
  WideString m_wsChange;
  WideString m_wsFullText;
  WideString m_wsNewContentType;
  WideString m_wsPrevContentType;
  WideString m_wsPrevText;
  WideString m_wsSoapFaultCode;
  WideString m_wsSoapFaultString;
};

#endif  // XFA_FXFA_CXFA_EVENTPARAM_H_
