#import <Foundation/Foundation.h>

#ifndef RNTextProperties_h
#define RNTextProperties_h

typedef NS_ENUM(NSInteger, RNSVGAlignmentBaseline) {
    RNSVGAlignmentBaselineBaseline,
    RNSVGAlignmentBaselineTextBottom,
    RNSVGAlignmentBaselineAlphabetic,
    RNSVGAlignmentBaselineIdeographic,
    RNSVGAlignmentBaselineMiddle,
    RNSVGAlignmentBaselineCentral,
    RNSVGAlignmentBaselineMathematical,
    RNSVGAlignmentBaselineTextTop,
    RNSVGAlignmentBaselineBottom,
    RNSVGAlignmentBaselineCenter,
    RNSVGAlignmentBaselineTop,
    /*
     SVG implementations may support the following aliases in order to support legacy content:
     
     text-before-edge = text-top
     text-after-edge = text-bottom
     */
    RNSVGAlignmentBaselineTextBeforeEdge,
    RNSVGAlignmentBaselineTextAfterEdge,
    // SVG 1.1
    RNSVGAlignmentBaselineBeforeEdge,
    RNSVGAlignmentBaselineAfterEdge,
    RNSVGAlignmentBaselineHanging,
    RNSVGAlignmentBaselineDEFAULT = RNSVGAlignmentBaselineBaseline
};

static NSString* const RNSVGAlignmentBaselineStrings[] = {
    @"baseline",
    @"text-bottom",
    @"alphabetic",
    @"ideographic",
    @"middle",
    @"central",
    @"mathematical",
    @"text-top",
    @"bottom",
    @"center",
    @"top",
    @"text-before-edge",
    @"text-after-edge",
    @"before-edge",
    @"after-edge",
    @"hanging",
    @"central",
    @"mathematical",
    @"text-top",
    @"bottom",
    @"center",
    @"top",
    nil
};

NSString* RNSVGAlignmentBaselineToString( enum RNSVGAlignmentBaseline fw );

enum RNSVGAlignmentBaseline RNSVGAlignmentBaselineFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGFontStyle) {
    RNSVGFontStyleNormal,
    RNSVGFontStyleItalic,
    RNSVGFontStyleOblique,
    RNSVGFontStyleDEFAULT = RNSVGFontStyleNormal,
};

static NSString* const RNSVGFontStyleStrings[] = {@"normal", @"italic", @"oblique", nil};

NSString* RNSVGFontStyleToString( enum RNSVGFontStyle fw );

enum RNSVGFontStyle RNSVGFontStyleFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGFontVariantLigatures) {
    RNSVGFontVariantLigaturesNormal,
    RNSVGFontVariantLigaturesNone,
    RNSVGFontVariantLigaturesDEFAULT = RNSVGFontVariantLigaturesNormal,
};

static NSString* const RNSVGFontVariantLigaturesStrings[] = {@"normal", @"none", nil};

NSString* RNSVGFontVariantLigaturesToString( enum RNSVGFontVariantLigatures fw );

enum RNSVGFontVariantLigatures RNSVGFontVariantLigaturesFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGFontWeight) {
    // Absolute
    RNSVGFontWeightNormal,
    RNSVGFontWeightBold,
    RNSVGFontWeight100,
    RNSVGFontWeight200,
    RNSVGFontWeight300,
    RNSVGFontWeight400,
    RNSVGFontWeight500,
    RNSVGFontWeight600,
    RNSVGFontWeight700,
    RNSVGFontWeight800,
    RNSVGFontWeight900,
    // Relative
    RNSVGFontWeightBolder,
    RNSVGFontWeightLighter,
    RNSVGFontWeightDEFAULT = RNSVGFontWeightNormal,
};

static NSString* const RNSVGFontWeightStrings[] = {@"normal", @"bold", @"100", @"200", @"300", @"400", @"500", @"600", @"700", @"800", @"900", @"bolder", @"lighter", nil};

static int const RNSVGAbsoluteFontWeights[] = {400, 700, 100, 200, 300, 400, 500, 600, 700, 800, 900};

static RNSVGFontWeight const RNSVGFontWeights[] = {
    RNSVGFontWeight100,
    RNSVGFontWeight100,
    RNSVGFontWeight200,
    RNSVGFontWeight300,
    RNSVGFontWeightNormal,
    RNSVGFontWeight500,
    RNSVGFontWeight600,
    RNSVGFontWeightBold,
    RNSVGFontWeight800,
    RNSVGFontWeight900,
    RNSVGFontWeight900
};

NSString* RNSVGFontWeightToString( enum RNSVGFontWeight fw );

enum RNSVGFontWeight RNSVGFontWeightFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextAnchor) {
    RNSVGTextAnchorStart,
    RNSVGTextAnchorMiddle,
    RNSVGTextAnchorEnd,
    RNSVGTextAnchorDEFAULT = RNSVGTextAnchorStart,
};

static NSString* const RNSVGTextAnchorStrings[] = {@"start", @"middle", @"end", nil};

NSString* RNSVGTextAnchorToString( enum RNSVGTextAnchor fw );

enum RNSVGTextAnchor RNSVGTextAnchorFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextDecoration) {
    RNSVGTextDecorationNone,
    RNSVGTextDecorationUnderline,
    RNSVGTextDecorationOverline,
    RNSVGTextDecorationLineThrough,
    RNSVGTextDecorationBlink,
    RNSVGTextDecorationDEFAULT = RNSVGTextDecorationNone,
};

static NSString* const RNSVGTextDecorationStrings[] = {@"None", @"Underline", @"Overline", @"LineThrough", @"Blink", nil};

NSString* RNSVGTextDecorationToString( enum RNSVGTextDecoration fw );

enum RNSVGTextDecoration RNSVGTextDecorationFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextLengthAdjust) {
    RNSVGTextLengthAdjustSpacing,
    RNSVGTextLengthAdjustSpacingAndGlyphs,
    RNSVGTextLengthAdjustDEFAULT = RNSVGTextLengthAdjustSpacing,
};

static NSString* const RNSVGTextLengthAdjustStrings[] = {@"spacing", @"spacingAndGlyphs", nil};

NSString* RNSVGTextLengthAdjustToString( enum RNSVGTextLengthAdjust fw );

enum RNSVGTextLengthAdjust RNSVGTextLengthAdjustFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextPathMethod) {
    RNSVGTextPathMethodAlign,
    RNSVGTextPathMethodStretch,
    RNSVGTextPathMethodDEFAULT = RNSVGTextPathMethodAlign,
};

static NSString* const RNSVGTextPathMethodStrings[] = {@"align", @"stretch", nil};

NSString* RNSVGTextPathMethodToString( enum RNSVGTextPathMethod fw );

enum RNSVGTextPathMethod RNSVGTextPathMethodFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextPathMidLine) {
    RNSVGTextPathMidLineSharp,
    RNSVGTextPathMidLineSmooth,
    RNSVGTextPathMidLineDEFAULT = RNSVGTextPathMidLineSharp,
};

static NSString* const RNSVGTextPathMidLineStrings[] = {@"sharp", @"smooth", nil};

NSString* RNSVGTextPathMidLineToString( enum RNSVGTextPathMidLine fw );

enum RNSVGTextPathMidLine RNSVGTextPathMidLineFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextPathSide) {
    RNSVGTextPathSideLeft,
    RNSVGTextPathSideRight,
    RNSVGTextPathSideDEFAULT = RNSVGTextPathSideLeft,
};

static NSString* const RNSVGTextPathSideStrings[] = {@"left", @"right", nil};

NSString* RNSVGTextPathSideToString( enum RNSVGTextPathSide fw );

enum RNSVGTextPathSide RNSVGTextPathSideFromString( NSString* s );

typedef NS_ENUM(NSInteger, RNSVGTextPathSpacing) {
    RNSVGTextPathSpacingAutoSpacing,
    RNSVGTextPathSpacingExact,
    RNSVGTextPathSpacingDEFAULT = RNSVGTextPathSpacingAutoSpacing,
};

static NSString* const RNSVGTextPathSpacingStrings[] = {@"auto", @"exact", nil};

NSString* RNSVGTextPathSpacingToString( enum RNSVGTextPathSpacing fw );

enum RNSVGTextPathSpacing RNSVGTextPathSpacingFromString( NSString* s );

#endif
