//
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//

NS_ASSUME_NONNULL_BEGIN

extern const CGFloat kOWSMessageCellCornerRadius_Large;
extern const CGFloat kOWSMessageCellCornerRadius_Small;

typedef NS_OPTIONS(NSUInteger, OWSDirectionalRectCorner) {
    OWSDirectionalRectCornerTopLeading = 1 << 0,
    OWSDirectionalRectCornerTopTrailing = 1 << 1,
    OWSDirectionalRectCornerBottomLeading = 1 << 2,
    OWSDirectionalRectCornerBottomTrailing = 1 << 3,
    OWSDirectionalRectCornerAllCorners = ~0UL
};

@class OWSBubbleView;

@protocol OWSBubbleViewPartner <NSObject>

- (void)updateLayers;

- (void)setBubbleView:(nullable OWSBubbleView *)bubbleView;

@end

#pragma mark -

@interface OWSBubbleView : UIView

+ (UIBezierPath *)roundedBezierRectWithBubbleTop:(CGFloat)bubbleTop
                                      bubbleLeft:(CGFloat)bubbleLeft
                                    bubbleBottom:(CGFloat)bubbleBottom
                                     bubbleRight:(CGFloat)bubbleRight
                               sharpCornerRadius:(CGFloat)sharpCornerRadius
                                wideCornerRadius:(CGFloat)wideCornerRadius
                                    sharpCorners:(OWSDirectionalRectCorner)sharpCorners;

@property (nonatomic, nullable) UIColor *bubbleColor;

@property (nonatomic) OWSDirectionalRectCorner sharpCorners;

- (UIBezierPath *)maskPath;

#pragma mark - Coordination

- (void)addPartnerView:(id<OWSBubbleViewPartner>)view;

- (void)clearPartnerViews;

- (void)updatePartnerViews;

- (CGFloat)minWidth;

- (CGFloat)minHeight;

@end

NS_ASSUME_NONNULL_END