//
//  NSAttributedString+Sweeter.swift
//
//  Created by Yonat Sharon on 2019-02-08.
//

import Foundation

public extension NSAttributedString {
    /// Sweeter: Create attributed string from HTML
    convenience init?(htmlString: String, defaultAttributes: [NSAttributedString.Key: Any]? = nil) {
        guard let data = htmlString.data(using: .utf8) else { return nil }
        let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
            .documentType: NSAttributedString.DocumentType.html,
            .characterEncoding: String.Encoding.utf8.rawValue,
            .defaultAttributes: defaultAttributes ?? [:],
        ]

        try? self.init(data: data, options: options, documentAttributes: nil)
    }
}

public extension NSMutableAttributedString {
    /// Sweeter: Make part of the string into a link.
    ///
    /// - Parameters:
    ///   - url: link address.
    ///   - anchorText: substring to make into a link.
    func link(anchorText: String, url: String) {
        guard let urlObject = URL(string: url) else { return }
        let anchorRange = mutableString.range(of: anchorText, options: [.caseInsensitive, .diacriticInsensitive, .widthInsensitive])
        guard NSNotFound != anchorRange.location else { return }
        addAttribute(.link, value: urlObject, range: anchorRange)
    }
}
