//
//  SidebarContextMenu.swift
//  NetNewsWire
//
//  Created by Maurice Parker on 7/17/20.
//  Copyright © 2020 Ranchero Software. All rights reserved.
//

import SwiftUI
import RSCore
import Account

struct SidebarContextMenu: View {
	
	@Environment(\.undoManager) var undoManager
	@Environment(\.openURL) var openURL
	@EnvironmentObject private var sidebarModel: SidebarModel
	@Binding var showInspector: Bool
	var sidebarItem: SidebarItem
	
	
    var body: some View {
		// MARK: Account Context Menu
		if sidebarItem.representedType == .account {
			Button {
				showInspector = true
			} label: {
				Text("Get Info")
				#if os(iOS)
				AppAssets.getInfoImage
				#endif
			}
			Button {
				sidebarModel.markAllAsReadInAccount.send(sidebarItem.represented as! Account)
			} label: {
				Text("Mark All As Read")
				#if os(iOS)
				AppAssets.markAllAsReadImage
				#endif
			}
		}
		
		// MARK: Pseudofeed Context Menu
		if sidebarItem.representedType == .pseudoFeed {
			Button {
				guard let feed = sidebarItem.feed else {
					return
				}
				sidebarModel.markAllAsReadInFeed.send(feed)
			} label: {
				Text("Mark All As Read")
				#if os(iOS)
				AppAssets.markAllAsReadImage
				#endif
			}
		}
		
		// MARK: Webfeed Context Menu
		if sidebarItem.representedType == .webFeed {
			Button {
				showInspector = true
			} label: {
				Text("Get Info")
				#if os(iOS)
				AppAssets.getInfoImage
				#endif
			}
			Button {
				guard let feed = sidebarItem.feed else {
					return
				}
				sidebarModel.markAllAsReadInFeed.send(feed)
			} label: {
				Text("Mark All As Read")
				#if os(iOS)
				AppAssets.markAllAsReadImage
				#endif
			}
			Divider()
			Button {
				guard let homepage = (sidebarItem.feed as? WebFeed)?.homePageURL,
					  let url = URL(string: homepage) else {
					return
				}
				openURL(url)
			} label: {
				Text("Open Home Page")
				#if os(iOS)
				AppAssets.openInBrowserImage
				#endif
			}
			Divider()
			Button {
				guard let feedUrl = (sidebarItem.feed as? WebFeed)?.url else {
					return
				}
				#if os(macOS)
				URLPasteboardWriter.write(urlString: feedUrl, to: NSPasteboard.general)
				#else
				UIPasteboard.general.string = feedUrl
				#endif
				
			} label: {
				Text("Copy Feed URL")
				#if os(iOS)
				AppAssets.copyImage
				#endif
			}
			Button {
				guard let homepage = (sidebarItem.feed as? WebFeed)?.homePageURL else {
					return
				}
				#if os(macOS)
				URLPasteboardWriter.write(urlString: homepage, to: NSPasteboard.general)
				#else
				UIPasteboard.general.string = homepage
				#endif
			} label: {
				Text("Copy Home Page URL")
				#if os(iOS)
				AppAssets.copyImage
				#endif
			}
			Divider()
			Button {
				if AppDefaults.shared.sidebarConfirmDelete == false {
					sidebarModel.deleteFromAccount.send(sidebarItem.feed!)
				} else {
					sidebarModel.sidebarItemToDelete = sidebarItem.feed!
					sidebarModel.showDeleteConfirmation = true
				}
			} label: {
				Text("Delete")
				#if os(iOS)
				AppAssets.deleteImage
				#endif
			}
		}
		
		// MARK: Folder Context Menu
		if sidebarItem.representedType == .folder {
			Button {
				showInspector = true
			} label: {
				Text("Get Info")
				#if os(iOS)
				AppAssets.getInfoImage
				#endif
			}
			Button {
				guard let feed = sidebarItem.feed else {
					return
				}
				sidebarModel.markAllAsReadInFeed.send(feed)
			} label: {
				Text("Mark All As Read")
				#if os(iOS)
				AppAssets.markAllAsReadImage
				#endif
			}
			
			/*
				You cannot select folder level items in b4. Delete is disabled for the time being.
			*/
			/*
			Divider()
			Button {
				if AppDefaults.shared.sidebarConfirmDelete == false {
					sidebarModel.deleteFromAccount.send(sidebarItem.feed!)
				} else {
					sidebarModel.sidebarContextMenuItem = sidebarItem.feed
					sidebarModel.showDeleteConfirmation = true
				}
			} label: {
				Text("Delete")
				#if os(iOS)
				AppAssets.deleteImage
				#endif
			}
			*/
		}
		
    }
}