//
//  MasterPrimaryViewController.swift
//  NetNewsWire
//
//  Created by Maurice Parker on 4/8/19.
//  Copyright © 2019 Ranchero Software. All rights reserved.
//

import UIKit
import Account
import RSCore
import RSTree

class MasterPrimaryViewController: MasterViewController {

	// MARK: Actions
	
	@IBAction func showOPMLImportExport(_ sender: UIBarButtonItem) {
		
		let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
		
		let importOPML = UIAlertAction(title: "Import OPML", style: .default) { [unowned self] alertAction in
			let docPicker = UIDocumentPickerViewController(documentTypes: ["public.xml", "org.opml.opml"], in: .import)
			docPicker.delegate = self
			docPicker.modalPresentationStyle = .formSheet
			self.present(docPicker, animated: true)
		}
		optionMenu.addAction(importOPML)
		
		let exportOPML = UIAlertAction(title: "Export OPML", style: .default) { [unowned self] alertAction in
			
			let filename = "MySubscriptions.opml"
			let tempFile = FileManager.default.temporaryDirectory.appendingPathComponent(filename)
			let opmlString = OPMLExporter.OPMLString(with: AccountManager.shared.localAccount, title: filename)
			do {
				try opmlString.write(to: tempFile, atomically: true, encoding: String.Encoding.utf8)
			} catch {
				self.presentError(title: "OPML Export Error", message: error.localizedDescription)
			}
			
			let docPicker = UIDocumentPickerViewController(url: tempFile, in: .exportToService)
			docPicker.modalPresentationStyle = .formSheet
			self.present(docPicker, animated: true)
			
		}
		optionMenu.addAction(exportOPML)
		optionMenu.addAction(UIAlertAction(title: "Cancel", style: .cancel))
		
		if let popoverController = optionMenu.popoverPresentationController {
			popoverController.barButtonItem = sender
		}

		self.present(optionMenu, animated: true)
		
	}
	
	// MARK: - Table View
	
	override func numberOfSections(in tableView: UITableView) -> Int {
		return treeController.rootNode.numberOfChildNodes
	}
	
	override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		return treeController.rootNode.childAtIndex(section)?.numberOfChildNodes ?? 0
	}
	
	override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
		guard let nameProvider = treeController.rootNode.childAtIndex(section)?.representedObject as? DisplayNameProvider else {
			return nil
		}
		return nameProvider.nameForDisplay
	}
	
	// MARK: API
	
	override func delete(indexPath: IndexPath) {
		
		guard let containerNode = treeController.rootNode.childAtIndex(indexPath.section),
			let deleteNode = containerNode.childAtIndex(indexPath.row),
			let container = containerNode.representedObject as? Container else {
				return
		}
		
		animatingChanges = true
		
		if let feed = deleteNode.representedObject as? Feed {
			container.deleteFeed(feed)
		}
		
		if let folder = deleteNode.representedObject as? Folder {
			container.deleteFolder(folder)
		}
		
		treeController.rebuild()
		tableView.deleteRows(at: [indexPath], with: .automatic)
		
		animatingChanges = false
		
	}
	
	override func nodeFor(indexPath: IndexPath) -> Node? {
		return treeController.rootNode.childAtIndex(indexPath.section)?.childAtIndex(indexPath.row)
	}
	
}

extension MasterPrimaryViewController: UIDocumentPickerDelegate {
	
	func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
		
		for url in urls {
			do {
				try OPMLImporter.parseAndImport(fileURL: url, account: AccountManager.shared.localAccount)
			} catch {
				presentError(title: "OPML Import Error", message: error.localizedDescription)
			}
		}
		
	}
	
}