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

#import "OWSTextView.h"
#import "Theme.h"
#import <SignalMessaging/SignalMessaging-Swift.h>

NS_ASSUME_NONNULL_BEGIN

const UIDataDetectorTypes kOWSAllowedDataDetectorTypes
    = UIDataDetectorTypeLink | UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent;

const UIDataDetectorTypes kOWSAllowedDataDetectorTypesExceptLinks
    = UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent;

@implementation OWSTextView

- (instancetype)initWithFrame:(CGRect)frame textContainer:(nullable NSTextContainer *)textContainer
{
    if (self = [super initWithFrame:frame textContainer:textContainer]) {
        [self ows_applyTheme];
    }

    // Setting dataDetectorTypes is expensive.  Do it just once.
    self.dataDetectorTypes = kOWSAllowedDataDetectorTypes;

    return self;
}

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        [self ows_applyTheme];
    }

    self.dataDetectorTypes = kOWSAllowedDataDetectorTypes;

    return self;
}

- (void)ows_applyTheme
{
    self.keyboardAppearance = LKAppModeUtilities.isLightMode ? UIKeyboardAppearanceDefault : UIKeyboardAppearanceDark;
}

// MARK: -

- (void)ensureShouldLinkifyText:(BOOL)shouldLinkifyText
{
    if (shouldLinkifyText) {
        // Setting dataDetectorTypes can be expensive, so we only update it when it's changed.
        if (self.dataDetectorTypes != kOWSAllowedDataDetectorTypes) {
            self.dataDetectorTypes = kOWSAllowedDataDetectorTypes;
        }
    } else {
        // Setting dataDetectorTypes can be expensive, so we only update it when it's changed.
        if (self.dataDetectorTypes != kOWSAllowedDataDetectorTypesExceptLinks) {
            self.dataDetectorTypes = kOWSAllowedDataDetectorTypesExceptLinks;
        }
    }
}

@end

NS_ASSUME_NONNULL_END
