//
//  ArticleFetcher.swift
//  Account
//
//  Created by Brent Simmons on 2/4/18.
//  Copyright © 2018 Ranchero Software, LLC. All rights reserved.
//

import Foundation
import Articles

public protocol ArticleFetcher {

	func fetchArticles() -> Set<Article>
	func fetchUnreadArticles() -> Set<Article>
}

extension Feed: ArticleFetcher {

	public func fetchArticles() -> Set<Article> {

		guard let account = account else {
			assertionFailure("Expected feed.account, but got nil.")
			return Set<Article>()
		}
		return account.fetchArticles(for: self)
	}

	public func fetchUnreadArticles() -> Set<Article> {

		guard let account = account else {
			assertionFailure("Expected feed.account, but got nil.")
			return Set<Article>()
		}
		return account.fetchUnreadArticles(for: self)
	}
}

extension Folder: ArticleFetcher {

	public func fetchArticles() -> Set<Article> {

		return fetchUnreadArticles()
	}

	public func fetchUnreadArticles() -> Set<Article> {

		guard let account = account else {
			assertionFailure("Expected folder.account, but got nil.")
			return Set<Article>()
		}

		return account.fetchArticles(folder: self)
	}
}