#ifndef CORE_RANDOM_H
#define CORE_RANDOM_H

#include "utils/Utility.h"

namespace Core {
    struct Random final {
        using Seed = u32;

    private:
        constexpr static int N = 25;
        constexpr static int M = 7;

        Seed data[N];
        int index;

    public:
        Random(Seed seed);

        int next();
        int next(int min, int inclusiveMax);
        bool nextBool();
        float nextFloat();
        float nextFloat(float min, float exclusiveMax);

    private:
        void update();
    };
}

#endif