#pragma once
#import "LinkRegexConfig.h"
#import "MentionStyleProps.h"
#import "TextDecorationLineEnum.h"
#import <UIKit/UIKit.h>

@interface EnrichedConfig : NSObject <NSCopying>
- (instancetype)init;

// MARK: - Shared props (Text and input)
- (UIColor *)primaryColor;
- (void)setPrimaryColor:(UIColor *)newValue;
- (NSNumber *)primaryFontSize;
- (void)setPrimaryFontSize:(NSNumber *)newValue;
- (CGFloat)primaryLineHeight;
- (void)setPrimaryLineHeight:(CGFloat)newValue;
- (CGFloat)scaledPrimaryLineHeight;
- (NSString *)primaryFontWeight;
- (void)setPrimaryFontWeight:(NSString *)newValue;
- (NSString *)primaryFontFamily;
- (void)setPrimaryFontFamily:(NSString *)newValue;
- (UIFont *)primaryFont;
- (UIFont *)monospacedFont;
- (NSSet<NSNumber *> *)mentionIndicators;
- (void)setMentionIndicators:(NSSet<NSNumber *> *)newValue;
- (CGFloat)h1FontSize;
- (void)setH1FontSize:(CGFloat)newValue;
- (BOOL)h1Bold;
- (void)setH1Bold:(BOOL)newValue;
- (CGFloat)h2FontSize;
- (void)setH2FontSize:(CGFloat)newValue;
- (BOOL)h2Bold;
- (void)setH2Bold:(BOOL)newValue;
- (CGFloat)h3FontSize;
- (void)setH3FontSize:(CGFloat)newValue;
- (BOOL)h3Bold;
- (void)setH3Bold:(BOOL)newValue;
- (CGFloat)h4FontSize;
- (void)setH4FontSize:(CGFloat)newValue;
- (BOOL)h4Bold;
- (void)setH4Bold:(BOOL)newValue;
- (CGFloat)h5FontSize;
- (void)setH5FontSize:(CGFloat)newValue;
- (BOOL)h5Bold;
- (void)setH5Bold:(BOOL)newValue;
- (CGFloat)h6FontSize;
- (void)setH6FontSize:(CGFloat)newValue;
- (BOOL)h6Bold;
- (void)setH6Bold:(BOOL)newValue;
- (UIColor *)blockquoteBorderColor;
- (void)setBlockquoteBorderColor:(UIColor *)newValue;
- (CGFloat)blockquoteBorderWidth;
- (void)setBlockquoteBorderWidth:(CGFloat)newValue;
- (CGFloat)blockquoteGapWidth;
- (void)setBlockquoteGapWidth:(CGFloat)newValue;
- (UIColor *)blockquoteColor;
- (void)setBlockquoteColor:(UIColor *)newValue;
- (UIColor *)inlineCodeFgColor;
- (void)setInlineCodeFgColor:(UIColor *)newValue;
- (UIColor *)inlineCodeBgColor;
- (void)setInlineCodeBgColor:(UIColor *)newValue;
- (CGFloat)orderedListGapWidth;
- (void)setOrderedListGapWidth:(CGFloat)newValue;
- (CGFloat)orderedListMarginLeft;
- (void)setOrderedListMarginLeft:(CGFloat)newValue;
- (NSString *)orderedListMarkerFontWeight;
- (void)setOrderedListMarkerFontWeight:(NSString *)newValue;
- (UIColor *)orderedListMarkerColor;
- (void)setOrderedListMarkerColor:(UIColor *)newValue;
- (UIFont *)orderedListMarkerFont;
- (UIColor *)unorderedListBulletColor;
- (void)setUnorderedListBulletColor:(UIColor *)newValue;
- (CGFloat)unorderedListBulletSize;
- (void)setUnorderedListBulletSize:(CGFloat)newValue;
- (CGFloat)unorderedListGapWidth;
- (void)setUnorderedListGapWidth:(CGFloat)newValue;
- (CGFloat)unorderedListMarginLeft;
- (void)setUnorderedListMarginLeft:(CGFloat)newValue;
- (UIColor *)linkColor;
- (void)setLinkColor:(UIColor *)newValue;
- (TextDecorationLineEnum)linkDecorationLine;
- (void)setLinkDecorationLine:(TextDecorationLineEnum)newValue;
- (void)setMentionStyleProps:(NSDictionary *)newValue;
- (MentionStyleProps *)mentionStylePropsForIndicator:(NSString *)indicator;
- (UIColor *)codeBlockFgColor;
- (void)setCodeBlockFgColor:(UIColor *)newValue;
- (UIColor *)codeBlockBgColor;
- (void)setCodeBlockBgColor:(UIColor *)newValue;
- (CGFloat)codeBlockBorderRadius;
- (void)setCodeBlockBorderRadius:(CGFloat)newValue;
- (void)invalidateFonts;
- (NSNumber *)scaledPrimaryFontSize;
- (BOOL)allowFontScaling;
- (void)setAllowFontScaling:(BOOL)newValue;
- (CGFloat)checkboxListBoxSize;
- (void)setCheckboxListBoxSize:(CGFloat)newValue;
- (CGFloat)checkboxListGapWidth;
- (void)setCheckboxListGapWidth:(CGFloat)newValue;
- (CGFloat)checkboxListMarginLeft;
- (void)setCheckboxListMarginLeft:(CGFloat)newValue;
- (UIColor *)checkboxListBoxColor;
- (void)setCheckboxListBoxColor:(UIColor *)newValue;
- (UIImage *)checkboxCheckedImage;
- (UIImage *)checkboxUncheckedImage;

// MARK: - Input only props
- (LinkRegexConfig *)linkRegexConfig;
- (void)setLinkRegexConfig:(LinkRegexConfig *)newValue;
- (NSRegularExpression *)parsedLinkRegex;

// MARK: - Text only props
- (UIColor *)linkPressColor;
- (void)setLinkPressColor:(UIColor *)newValue;
@end
