#pragma once

#include <GL/glew.h>
#include <glm/glm.hpp>
#include "math.h"
#include "colors.h"

struct Light {
  Vector3 color = Color::WHITE;
  f32 ambient_intensity = 1.0f;
  f32 diffuse_intensity = 0.0f;
};

struct Directional_Light : public Light {
  Vector3 direction = Vector3(0.0f, -1.0f, 0.0f); // Default to down
};

struct Point_Light : public Light {
  Vector3 position = Vector3(0.0f, 0.0f, 0.0f);
  f32 constant = 1.0f;
  f32 linear = 0.0f;
  f32 exponent = 0.0f;
};

struct Spot_Light : public Light {
  Vector3 direction = Vector3(0.0f, -1.0f, 0.0f);
  Vector3 position = Vector3(0.0f, 0.0f, 0.0f);
  f32 constant = 1.0f;
  f32 linear = 0.0f;
  f32 exponent = 0.0f;
  f32 edge = 0.0f;
  f32 processed_edge = 0.0f; // Don't forget to glm::radians(edge)
};

