#ifndef PRESET_FRAME_IO_HPP
#define PRESET_FRAME_IO_HPP

#include <vector>
#include "Renderer/MilkdropWaveform.hpp"
#include "Renderer/Pipeline.hpp"
#include "Renderer/Filters.hpp"
#include "CustomShape.hpp"
#include "CustomWave.hpp"
#include "Renderer/VideoEcho.hpp"


/// Container for all *read only* engine variables a preset requires to
/// evaluate milkdrop equations. Every preset object needs a reference to one of these.
class PresetInputs : public PipelineContext {

public:
  /* PER_PIXEL VARIBLES BEGIN */

  float x_per_pixel;
  float y_per_pixel;
  float rad_per_pixel;
  float ang_per_pixel;

  /* PER_PIXEL VARIBLES END */

  float bass;
  float mid;
  float treb;
  float bass_att;
  float mid_att;
  float treb_att;

  /* variables were added in milkdrop 1.04 */
  int gx, gy;

  float **x_mesh;
  float **y_mesh;
  float **rad_mesh;
  float **theta_mesh;

  float **origtheta;  //grid containing interpolated mesh reference values
  float **origrad;
  float **origx;  //original mesh
  float **origy;

  void resetMesh();

  ~PresetInputs();
  PresetInputs();

  /// Initializes this preset inputs given a mesh size.
  /// \param gx the width of the mesh
  /// \param gy the height of the mesh
  /// \note This must be called before reading values from this class
  void Initialize(int gx, int gy);

  /// Updates this preset inputs with the latest values from the
  /// the pipeline context and beat detection unit
  void update (const BeatDetect & music, const PipelineContext & context);

private:
};


/// Container class for all preset writeable engine variables. This is the important glue
/// between the presets and renderer to facilitate smooth preset switching
/// Every preset object needs a reference to one of these.
class PresetOutputs : public Pipeline {
public:
  typedef std::vector<CustomWave*> cwave_container;
  typedef std::vector<CustomShape*> cshape_container;

  cwave_container customWaves;
  cshape_container customShapes;

  void Initialize(int gx, int gy);
  PresetOutputs();
  ~PresetOutputs();
  virtual void Render(const BeatDetect &music, const PipelineContext &context);
  void PerPixelMath( const PipelineContext &context);
  /* PER FRAME VARIABLES BEGIN */

  float zoom;
  float zoomexp;
  float rot;
  float warp;

  float sx;
  float sy;
  float dx;
  float dy;
  float cx;
  float cy;

  VideoEcho videoEcho;

  MilkdropWaveform wave;
  Border border;
  MotionVectors mv;
  DarkenCenter darkenCenter;

  Brighten brighten;
  Darken darken;
  Invert invert;
  Solarize solarize;


  int gy,gx;
  /* PER_FRAME VARIABLES END */

  float fRating;
  float fGammaAdj;

  bool bDarkenCenter;
  bool bRedBlueStereo;
  bool bBrighten;
  bool bDarken;
  bool bSolarize;
  bool bInvert;
  bool bMotionVectorsOn;

  float fWarpAnimSpeed;
  float fWarpScale;
  float fShader;

  float **zoom_mesh;
  float **zoomexp_mesh;
  float **rot_mesh;

  float **sx_mesh;
  float **sy_mesh;
  float **dx_mesh;
  float **dy_mesh;
  float **cx_mesh;
  float **cy_mesh;
  float **warp_mesh;

  float **orig_x;  //original mesh
  float **orig_y;
  float **rad_mesh;
};


#endif
