//  Copyright © 2020 Australian Government All rights reserved.

import UIKit

public extension NSMutableAttributedString {
    @discardableResult
    func addLink(enclosedIn marker: String, urlString: String) -> Bool {
        guard !marker.isEmpty else { return false }
        
        // Begin marker
        guard let beginRange = string.range(of: marker) else { return false }
        let beginLowerBound = string.distance(from: string.startIndex, to: beginRange.lowerBound)
        let beginUpperBound = string.distance(from: string.startIndex, to: beginRange.upperBound)
        let nsBeginRange = NSRange(location: beginLowerBound, length: beginUpperBound - beginLowerBound)
        replaceCharacters(in: nsBeginRange, with: "")
        
        // End marker
        guard let endRange = string.range(of: marker) else { return false }
        let endLowerBound = string.distance(from: string.startIndex, to: endRange.lowerBound)
        let endUpperBound = string.distance(from: string.startIndex, to: endRange.upperBound)
        let nsEndRange = NSRange(location: endLowerBound, length: endUpperBound - endLowerBound)
        replaceCharacters(in: nsEndRange, with: "")
        
        let linkRange = NSRange(location: nsBeginRange.location, length: nsEndRange.location - nsBeginRange.location)
        let attributes: [NSAttributedString.Key: Any] = [
            .link: urlString,
            .underlineStyle: NSUnderlineStyle.single.rawValue,
            .underlineColor: UIColor.covidSafeColor
        ]
        
        addAttributes(attributes, range: linkRange)
        
        return true
    }
}