#ifndef ALMOND_VIDEORECIPE_H
#define ALMOND_VIDEORECIPE_H

#include <optional>

#include "MandelUtil.h"
#include "Gradient.h"

namespace alm
{
    enum class Interpolation
    {
        NONE,
        LINEAR,
        SINE
    };

    template<typename T>
    struct Change
    {
        T newValue;
        Interpolation interpolation;
    };

    template<typename T>
    using MaybeChange = std::optional<Change<T>>;

    struct VideoPoint;
    struct VideoRecipe;
}


struct alm::VideoPoint
{
    MaybeChange<int> maxIterations;
    MaybeChange<mnd::MandelViewport> view;
    MaybeChange<Gradient> gradient;
};


struct alm::VideoRecipe
{
    int width;
    int height;

    float fps;

    std::vector<VideoPoint> nodes;
};

#endif // ALMOND_VIDEORECIPE_H
