#include "./GameObject.h"
#include "glm.hpp"
#include "ext.hpp"
#include "src/Render_Utils.h"

#pragma once
class Planet : public GameObject
{
private:
	GameObject* center;
	float distanceFromCenter;
	float rotationSpeed;
	Core::RenderContext sphereContext;
	float scale;
	glm::vec3 position;
	glm::mat4 positionMatrix;
	GLuint textureID;
	GLuint normalMapID;

public:
	Planet(GameObject* center, float distanceFromCenter, float rotationSpeed, float scale, Core::RenderContext sphereContext, GLuint textureID, GLuint normalMapID) {
		this->center = center;
		this->distanceFromCenter = distanceFromCenter;
		this->rotationSpeed = rotationSpeed;
		this->sphereContext = sphereContext;
		this->scale = scale;
		this->position = glm::vec3(0);
		this->textureID = textureID;
		this->normalMapID = normalMapID;
	}

	glm::mat4 getPositionMatrix() override {
		return positionMatrix;
	}

	void draw(float time, GLuint program) {
		if (center == nullptr) {
			return;
		}

		float rotationAngle = glm::radians(time * rotationSpeed);
		positionMatrix = center->getPositionMatrix() * glm::eulerAngleY(time * rotationSpeed) * glm::translate(glm::vec3(distanceFromCenter, 0, 0));
	    glm::mat4 modelMatrix = positionMatrix * glm::scale(glm::vec3(scale));
		Core::drawObjectPBRTexture(sphereContext, modelMatrix, textureID, normalMapID, 0.7, 0.0, program);
	}
};