#pragma once

#include "Material.h"

#include "Color.h"

class BasicMaterial : public Material
{
public:
    BasicMaterial();
    virtual ~BasicMaterial();

    const Color& getFillColor() const;
    const Color& getStrokeColor() const;
    double getStrokeThickness() const;

    bool hasFillColor() const;
    bool hasStrokeColor() const;

    bool setHasStrokeColor(bool hasStroke);
    bool setHasFillColor(bool hasFill);

    bool setFillColor(const Color& color);
    bool setStrokeColor(const Color& color);
    bool setStrokeThickness(double thickness);

    bool operator==(const BasicMaterial& rhs) const
    {
        return (mHasFillColor == rhs.mHasFillColor)
            && (mHasStrokeColor == rhs.mHasStrokeColor)
            && (mFillColor == rhs.mFillColor)
            && (mStrokeColor == rhs.mStrokeColor)
            && (mStrokeThickness == rhs.mStrokeThickness);
    }

    bool operator!=(const BasicMaterial& rhs) const
    {
        return !operator==(rhs);
    }

private:
    bool mHasFillColor{ false };
    bool mHasStrokeColor{ true };

    Color mFillColor;
    Color mStrokeColor;

    double mStrokeThickness{ 1.0 };
};