//
//  SettingsAboutView.swift
//  NetNewsWire-iOS
//
//  Created by Maurice Parker on 9/16/19.
//  Copyright © 2019 Ranchero Software. All rights reserved.
//

import SwiftUI
import Combine

struct SettingsAboutView: View {

	@ObservedObject var viewModel: ViewModel
	
    var body: some View {
		GeometryReader { geometry in
			List {
				Text("NetNewsWire").font(.largeTitle)
				AttributedStringView(string: self.viewModel.about, preferredMaxLayoutWidth: geometry.size.width - 20)
				Section(header: Text("CREDITS")) {
					AttributedStringView(string: self.viewModel.credits, preferredMaxLayoutWidth: geometry.size.width - 20)
				}
				Section(header: Text("ACKNOWLEDGEMENTS")) {
					AttributedStringView(string: self.viewModel.acknowledgements, preferredMaxLayoutWidth: geometry.size.width - 20)
				}
				Section(header: Text("THANKS")) {
					AttributedStringView(string: self.viewModel.thanks, preferredMaxLayoutWidth: geometry.size.width - 20)
				}
				Section(header: Text("DEDICATION"), footer: Text("Copyright © 2002-2019 Ranchero Software").font(.footnote)) {
					AttributedStringView(string: self.viewModel.dedication, preferredMaxLayoutWidth: geometry.size.width - 20)
				}
			}
		}
    }

	class ViewModel: ObservableObject {
		let objectWillChange = ObservableObjectPublisher()
		
		var about: NSAttributedString
		var credits: NSAttributedString
		var acknowledgements: NSAttributedString
		var thanks: NSAttributedString
		var dedication: NSAttributedString

		init() {
			about = ViewModel.loadResource("About")
			credits = ViewModel.loadResource("Credits")
			acknowledgements = ViewModel.loadResource("Acknowledgments")
			thanks = ViewModel.loadResource("Thanks")
			dedication = ViewModel.loadResource("Dedication")
		}
		
		private static func loadResource(_ resource: String) -> NSAttributedString {
			let url = Bundle.main.url(forResource: resource, withExtension: "rtf")!
			return try! NSAttributedString(url: url, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil)

		}
		
	}
}

struct SettingsAboutView_Previews: PreviewProvider {
    static var previews: some View {
		SettingsAboutView(viewModel: SettingsAboutView.ViewModel())
    }
}