//
//  URL-Extensions.swift
//  NetNewsWire
//
//  Created by Stuart Breckenridge on 03/05/2020.
//  Copyright © 2020 Ranchero Software. All rights reserved.
//

import Foundation

extension URL {
	
	/// Extracts email address from a `URL` with a `mailto` scheme, otherwise `nil`.
	var emailAddress: String? {
		scheme == "mailto" ? URLComponents(url: self, resolvingAgainstBaseURL: false)?.path : nil
	}
	
	/// Percent encoded `mailto` URL for use with `canOpenUrl`. If the URL doesn't contain the `mailto` scheme, this is `nil`.
	var percentEncodedEmailAddress: URL? {
		guard scheme == "mailto" else {
			return nil
		}
		guard let urlString = absoluteString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
			return nil
		}
		return URL(string: urlString)
	}
	
	/// Reverse chronological list of release notes.
	static let releaseNotes = URL(string: "https://github.com/Ranchero-Software/NetNewsWire/releases/")!

	func valueFor(_ parameter: String) -> String? {
		guard let components = URLComponents(url: self, resolvingAgainstBaseURL: false),
			  let queryItems = components.queryItems,
			  let value = queryItems.first(where: { $0.name == parameter })?.value else {
			return nil
		}
		return value
		
	}
	
	static func reparingIfRequired(_ link: String?) -> URL? {
		// If required, we replace any space characters to handle malformed links that are otherwise percent
		// encoded but contain spaces. For performance reasons, only try this if initial URL init fails.
		guard let link = link, !link.isEmpty else { return nil }
		if let url = URL(string: link) {
			return url
		} else {
			return URL(string: link.replacingOccurrences(of: " ", with: "%20"))
		}
	}

}
