#ifndef MXACTIONNOTIFICATIONPARAM_H
#define MXACTIONNOTIFICATIONPARAM_H

#include "mxnotificationparam.h"
#include "mxdsaction.h"

// VTABLE 0x100d8350
// SIZE 0x14
class MxActionNotificationParam : public MxNotificationParam
{
public:
  inline MxActionNotificationParam(MxParamType p_type, MxCore *p_sender, MxDSAction *p_action, MxBool p_reallocAction) : MxNotificationParam(p_type, p_sender)
  {
    MxDSAction *oldAction = p_action;
    this->m_realloc = p_reallocAction;

    if (p_reallocAction)
      this->m_action = new MxDSAction();
    else {
      this->m_action = oldAction;
      return;
    }

    this->m_action->SetAtomId(oldAction->GetAtomId());
    this->m_action->SetObjectId(oldAction->GetObjectId());
    this->m_action->SetUnknown24(oldAction->GetUnknown24());
  }

  // OFFSET: LEGO1 0x10051050
  inline virtual MxActionNotificationParam::~MxActionNotificationParam() override
  {
    if (!this->m_realloc)
      return;

    if (this->m_action)
      delete this->m_action;
  }

  virtual MxNotificationParam *Clone() override; // vtable+0x4

protected:
  MxDSAction *m_action; // 0xc
  MxBool m_realloc; // 0x10
};

// VTABLE 0x100d8358
// SIZE 0x14
class MxEndActionNotificationParam : public MxActionNotificationParam
{
public:
  inline MxEndActionNotificationParam(MxParamType p_type, MxCore *p_sender, MxDSAction *p_action, MxBool p_reallocAction)
      : MxActionNotificationParam(p_type, p_sender, p_action, p_reallocAction) {}

  inline virtual ~MxEndActionNotificationParam() override {}; // 0x100513a0

  virtual MxNotificationParam *Clone() override; // vtable+0x4
};

#endif