#include <mbgl/style/types.hpp>
#include <mbgl/util/enum.hpp>

namespace mbgl {

using namespace style;

MBGL_DEFINE_ENUM(SourceType,
                 {{SourceType::Vector, "vector"},
                  {SourceType::Raster, "raster"},
                  {SourceType::GeoJSON, "geojson"},
                  {SourceType::Video, "video"},
                  {SourceType::Annotations, "annotations"},
                  {SourceType::Image, "image"},
                  {SourceType::CustomVector, "customvector"}});

MBGL_DEFINE_ENUM(VisibilityType,
                 {
                     {VisibilityType::Visible, "visible"},
                     {VisibilityType::None, "none"},
                 });

MBGL_DEFINE_ENUM(TranslateAnchorType,
                 {
                     {TranslateAnchorType::Map, "map"},
                     {TranslateAnchorType::Viewport, "viewport"},
                 });

MBGL_DEFINE_ENUM(RasterResamplingType,
                 {
                     {RasterResamplingType::Linear, "linear"},
                     {RasterResamplingType::Nearest, "nearest"},
                 });

MBGL_DEFINE_ENUM(HillshadeIlluminationAnchorType,
                 {
                     {HillshadeIlluminationAnchorType::Map, "map"},
                     {HillshadeIlluminationAnchorType::Viewport, "viewport"},
                 });

MBGL_DEFINE_ENUM(RotateAnchorType,
                 {
                     {RotateAnchorType::Map, "map"},
                     {RotateAnchorType::Viewport, "viewport"},
                 });

MBGL_DEFINE_ENUM(CirclePitchScaleType,
                 {
                     {CirclePitchScaleType::Map, "map"},
                     {CirclePitchScaleType::Viewport, "viewport"},
                 });

MBGL_DEFINE_ENUM(LineCapType,
                 {
                     {LineCapType::Round, "round"},
                     {LineCapType::Butt, "butt"},
                     {LineCapType::Square, "square"},
                 });

MBGL_DEFINE_ENUM(LineJoinType,
                 {
                     {LineJoinType::Miter, "miter"},
                     {LineJoinType::Bevel, "bevel"},
                     {LineJoinType::Round, "round"},
                     {LineJoinType::FakeRound, "fakeround"},
                     {LineJoinType::FlipBevel, "flipbevel"},
                 });

MBGL_DEFINE_ENUM(SymbolPlacementType,
                 {
                     {SymbolPlacementType::Point, "point"},
                     {SymbolPlacementType::Line, "line"},
                     {SymbolPlacementType::LineCenter, "line-center"},
                 });

MBGL_DEFINE_ENUM(SymbolAnchorType,
                 {{SymbolAnchorType::Center, "center"},
                  {SymbolAnchorType::Left, "left"},
                  {SymbolAnchorType::Right, "right"},
                  {SymbolAnchorType::Top, "top"},
                  {SymbolAnchorType::Bottom, "bottom"},
                  {SymbolAnchorType::TopLeft, "top-left"},
                  {SymbolAnchorType::TopRight, "top-right"},
                  {SymbolAnchorType::BottomLeft, "bottom-left"},
                  {SymbolAnchorType::BottomRight, "bottom-right"}});

MBGL_DEFINE_ENUM(SymbolZOrderType,
                 {{SymbolZOrderType::Auto, "auto"},
                  {SymbolZOrderType::ViewportY, "viewport-y"},
                  {SymbolZOrderType::Source, "source"}});

MBGL_DEFINE_ENUM(TextJustifyType,
                 {
                     {TextJustifyType::Auto, "auto"},
                     {TextJustifyType::Center, "center"},
                     {TextJustifyType::Left, "left"},
                     {TextJustifyType::Right, "right"},
                 });

MBGL_DEFINE_ENUM(TextTransformType,
                 {
                     {TextTransformType::None, "none"},
                     {TextTransformType::Uppercase, "uppercase"},
                     {TextTransformType::Lowercase, "lowercase"},
                 });

MBGL_DEFINE_ENUM(TextWritingModeType,
                 {{TextWritingModeType::Horizontal, "horizontal"}, {TextWritingModeType::Vertical, "vertical"}});

MBGL_DEFINE_ENUM(AlignmentType,
                 {
                     {AlignmentType::Map, "map"},
                     {AlignmentType::Viewport, "viewport"},
                     {AlignmentType::Auto, "auto"},
                 });

MBGL_DEFINE_ENUM(IconTextFitType,
                 {
                     {IconTextFitType::None, "none"},
                     {IconTextFitType::Both, "both"},
                     {IconTextFitType::Width, "width"},
                     {IconTextFitType::Height, "height"},
                 });

MBGL_DEFINE_ENUM(LightAnchorType, {{LightAnchorType::Map, "map"}, {LightAnchorType::Viewport, "viewport"}});

} // namespace mbgl
