#pragma once

#include <random>

#include "../sampling/Sampler.h"
#include "../tools/Vec3.h"

namespace material {

class Material {
   public:
	virtual util::Vec3 albedo(float texel_x, float texel_y) = 0;
	virtual util::Vec3 emission(float texel_x, float texel_y) = 0;
	virtual util::Vec3 scattered_d(const util::Vec3& d,
	                               const util::Vec3& n) = 0;
	virtual bool scatter() = 0;
};

static std::random_device rd;
static std::mt19937 gen(rd());
static std::uniform_real_distribution<> dis(-1.0, 1.0);
util::Vec3 rand_vec3();
bool in_circle(const util::Vec3& v);
util::Vec3 rand_vec3_in_circle(float r);
}  // namespace material