#pragma once
#include <memory>

class Color
{
public:
    Color(unsigned r, unsigned g, unsigned b, double a = 1.0);

    static std::shared_ptr<Color> CreateShared(unsigned r, unsigned g, unsigned b, double a = 1.0);
    static std::unique_ptr<Color> Create(unsigned r, unsigned g, unsigned b, double a = 1.0);
    static std::unique_ptr<Color> Create(const Color& color);

    unsigned GetR() const;
    unsigned GetG() const;
    unsigned GetB() const;
    double GetAlpha() const;

private:
    unsigned mR{0};
    unsigned mG{0};
    unsigned mB{0};
    double mAlpha{0.0};
};

using ColorPtr = std::shared_ptr<Color>;
using ColorUPtr = std::unique_ptr<Color>;
