#pragma once

#include "shape.hpp"

// Figura: Átomo con núcleo central y órbitas electrónicas
// Comportamiento: Núcleo estático + electrones orbitando en planos inclinados
// Efecto: Modelo atómico clásico Bohr
class AtomShape : public Shape {
    private:
        float angle_y_ = 0.0f;         // Ángulo de rotación global en eje Y (rad)
        float orbit_phase_ = 0.0f;     // Fase de rotación de electrones (rad)
        float nucleus_radius_ = 0.0f;  // Radio del núcleo central (píxeles)
        float orbit_radius_ = 0.0f;    // Radio de las órbitas (píxeles)
        int num_points_ = 0;           // Cantidad total de puntos

    public:
        void generatePoints(int num_points, float screen_width, float screen_height) override;
        void update(float delta_time, float screen_width, float screen_height) override;
        void getPoint3D(int index, float& x, float& y, float& z) const override;
        const char* getName() const override { return "ATOM"; }
        float getScaleFactor(float screen_height) const override;
};
