//
//  MainApp.swift
//  Shared
//
//  Created by Maurice Parker on 6/27/20.
//  Copyright © 2020 Ranchero Software. All rights reserved.
//

import SwiftUI

@main
struct MainApp: App {
	
	#if os(macOS)
	@NSApplicationDelegateAdaptor(AppDelegate.self) private var delegate
	#endif
	#if os(iOS)
	@UIApplicationDelegateAdaptor(AppDelegate.self) private var delegate
	#endif
	
	@StateObject private var sceneModel = SceneModel()
	@StateObject private var defaults = AppDefaults.shared
	@State private var showSheet = false
	
	@SceneBuilder var body: some Scene {
		#if os(macOS)
		WindowGroup {
			SceneNavigationView()
				.frame(minWidth: 600, idealWidth: 1000, maxWidth: .infinity, minHeight: 600, idealHeight: 700, maxHeight: .infinity)
				.environmentObject(sceneModel)
				.environmentObject(defaults)
				.onAppear {
					sceneModel.startup()
				}
				.sheet(isPresented: $showSheet, onDismiss: { showSheet = false }) {
					AddWebFeedView()
				}
				.toolbar {
					
					ToolbarItem() {
						Menu {
							Button("Add Web Feed", action:  { showSheet = true })
							Button("Add Reddit Feed", action:  { })
							Button("Add Twitter Feed", action:  { })
							Button("Add Folder", action:  { })
						} label : {
							AppAssets.addMenuImage
						}
					}
				
					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.refreshImage
						}).help("Refresh").padding(.trailing, 40)
					}

					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.markAllAsReadImagePDF
								.resizable()
								.scaledToFit()
								.frame(width: 20, height: 20, alignment: .center)
						}).help("Mark All as Read")
					}
					
					ToolbarItem {
						MacSearchField()
							.frame(width: 200)
					}

					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.nextUnreadArticleImage
						}).help("Go to Next Unread").padding(.trailing, 40)
					}

					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.starOpenImage
						}).help("Mark as Starred")
					}
					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.readClosedImage
						}).help("Mark as Unread")
					}
					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.openInBrowserImage
						}).help("Open in Browser")
					}
					ToolbarItem {
						Button(action: {}, label: {
							AppAssets.shareImage
						}).help("Share")
					}
					

				}
		}
		.commands {
			CommandGroup(after: .newItem, addition: {
				Button("New Feed", action: {})
					.keyboardShortcut("N")
				Button("New Folder", action: {})
					.keyboardShortcut("N", modifiers: [.shift, .command])
				Button("Refresh", action: {})
					.keyboardShortcut("R")
			})
			CommandMenu("Subscriptions", content: {
				Button("Import Subscriptions", action: {})
					.keyboardShortcut("I", modifiers: [.shift, .command])
				Button("Import NNW 3 Subscriptions", action: {})
					.keyboardShortcut("O", modifiers: [.shift, .command])
				Button("Export Subscriptions", action: {})
					.keyboardShortcut("E", modifiers: [.shift, .command])
			})
			CommandMenu("Go", content: {
				Button("Next Unread", action: {})
					.keyboardShortcut("/", modifiers: [.command])
				Button("Today", action: {})
					.keyboardShortcut("1", modifiers: [.command])
				Button("All Unread", action: {})
					.keyboardShortcut("2", modifiers: [.command])
				Button("Starred", action: {})
					.keyboardShortcut("3", modifiers: [.command])
			})
			CommandMenu("Article", content: {
				Button("Mark as Read", action: {})
					.keyboardShortcut("U", modifiers: [.shift, .command])
				Button("Mark All as Read", action: {})
					.keyboardShortcut("K", modifiers: [.command])
				Button("Mark Older as Read", action: {})
					.keyboardShortcut("K", modifiers: [.shift, .command])
				Button("Mark as Starred", action: {})
					.keyboardShortcut("L", modifiers: [.shift, .command])
				Button("Open in Browser", action: {})
					.keyboardShortcut(.rightArrow, modifiers: [.command])
			})
		}
		.windowToolbarStyle(UnifiedWindowToolbarStyle())
		
		// Mac Preferences
		Settings {
			MacPreferencesView()
			.padding()
			.frame(width: 500)
			.navigationTitle("Preferences")
			.environmentObject(defaults)
		}
		.windowToolbarStyle(UnifiedWindowToolbarStyle())
		
		#endif
		
		#if os(iOS)
		WindowGroup {
			SceneNavigationView()
				.environmentObject(sceneModel)
				.environmentObject(defaults)
				.modifier(PreferredColorSchemeModifier(preferredColorScheme: defaults.userInterfaceColorPalette))
				.onAppear {
					sceneModel.startup()
				}
		}
		.commands {
			CommandGroup(after: .newItem, addition: {
				Button("New Feed", action: {})
					.keyboardShortcut("N")
				Button("New Folder", action: {})
					.keyboardShortcut("N", modifiers: [.shift, .command])
				Button("Refresh", action: {})
					.keyboardShortcut("R")
			})
			CommandGroup(before: .sidebar, addition: {
				Button("Show Sidebar", action: {})
					.keyboardShortcut("S", modifiers: [.control, .command])
			})
			CommandMenu("Subscriptions", content: {
				Button("Import Subscriptions", action: {})
					.keyboardShortcut("I", modifiers: [.shift, .command])
				Button("Import NNW 3 Subscriptions", action: {})
					.keyboardShortcut("O", modifiers: [.shift, .command])
				Button("Export Subscriptions", action: {})
					.keyboardShortcut("E", modifiers: [.shift, .command])
			})
			CommandMenu("Go", content: {
				Button("Next Unread", action: {})
					.keyboardShortcut("/", modifiers: [.command])
				Button("Today", action: {})
					.keyboardShortcut("1", modifiers: [.command])
				Button("All Unread", action: {})
					.keyboardShortcut("2", modifiers: [.command])
				Button("Starred", action: {})
					.keyboardShortcut("3", modifiers: [.command])
			})
			CommandMenu("Article", content: {
				Button("Mark as Read", action: {})
					.keyboardShortcut("U", modifiers: [.shift, .command])
				Button("Mark All as Read", action: {})
					.keyboardShortcut("K", modifiers: [.command])
				Button("Mark Older as Read", action: {})
					.keyboardShortcut("K", modifiers: [.shift, .command])
				Button("Mark as Starred", action: {})
					.keyboardShortcut("L", modifiers: [.shift, .command])
				Button("Open in Browser", action: {})
					.keyboardShortcut(.rightArrow, modifiers: [.command])
			})
		}
		#endif
	}
}