// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#pragma once

#include <maya/MFnDependencyNode.h>
#include <maya/MObject.h>

#include <frantic/graphics/transform4f.hpp>
#include <frantic/particles/streams/particle_istream.hpp>

#include <frantic/magma/magma_exception.hpp>

#include "frantic/magma/maya/maya_magma_datatypes.hpp"
#include "frantic/magma/maya/maya_magma_desc_mpxdata.hpp"
#include "frantic/magma/maya/maya_magma_description.hpp"
#include "frantic/magma/maya/maya_magma_exception.hpp"

namespace frantic {
namespace magma {
namespace maya {
namespace modifier {

void maya_magma_error_callback( const frantic::magma::magma_exception& e );

class maya_magma_modifier {
  private:
    typedef particles::streams::particle_istream_ptr particle_istream_ptr;

    // XXX use weak_ptr ?
    desc::maya_magma_desc_ptr m_desc;

    MObject& m_surShapeNode;

    frantic::graphics::transform4f m_worldTransform;

    frantic::graphics::transform4f m_cameraTransform;

  public:
    maya_magma_modifier( MObject& obj, const frantic::tstring& mayaMagmaPlugName,
                         const frantic::graphics::transform4f& worldTransform,
                         const frantic::graphics::transform4f& cameraTransform );

    ~maya_magma_modifier();

    particle_istream_ptr get_modified_particle_istream( particle_istream_ptr inStream ) const;
};

} // namespace modifier
} // namespace maya
} // namespace magma
} // namespace frantic