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

import SwiftUI

struct TimelineItemView: View {
	
	@EnvironmentObject var defaults: AppDefaults
	@StateObject var articleIconImageLoader = ArticleIconImageLoader()
	
	var selected: Bool
	var width: CGFloat
	var timelineItem: TimelineItem

	#if os(macOS)
	var verticalPadding: CGFloat = 10
	#endif
	#if os(iOS)
	var verticalPadding: CGFloat = 0
	#endif

    var body: some View {
		HStack(alignment: .top) {
			TimelineItemStatusView(selected: selected, status: timelineItem.status)
			if let image = articleIconImageLoader.image {
				IconImageView(iconImage: image)
					.frame(width: CGFloat(defaults.timelineIconDimensions), height: CGFloat(defaults.timelineIconDimensions), alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
			}
			VStack {
				let titleLines = timelineItem.numberOfTitleLines(width: width)
				if titleLines > 0 {
					Text(verbatim: timelineItem.truncatedTitle)
						.fontWeight(.semibold)
						.lineLimit(titleLines)
						.frame(maxWidth: .infinity, alignment: .leading)
						.padding(.trailing, 4)
						.fixedSize(horizontal: false, vertical: true)
				}
				let summaryLines = timelineItem.numberOfSummaryLines(width: width, titleLines: titleLines)
				if summaryLines > 0 {
					Text(verbatim: timelineItem.truncatedSummary)
						.lineLimit(summaryLines)
						.frame(maxWidth: .infinity, alignment: .leading)
						.padding(.trailing, 4)
						.fixedSize(horizontal: false, vertical: true)
				}
				Spacer(minLength: 0)
				HStack {
					Text(verbatim: timelineItem.byline)
						.lineLimit(1)
						.truncationMode(.tail)
						.font(.footnote)
						.foregroundColor(.secondary)
					Spacer()
					Text(verbatim: timelineItem.dateTimeString)
						.lineLimit(1)
						.font(.footnote)
						.foregroundColor(.secondary)
						.padding(.trailing, 4)
				}
			}
		}
		.padding(.vertical, verticalPadding)
		.onAppear {
			articleIconImageLoader.loadImage(for: timelineItem.article)
		}
		.contextMenu {
			TimelineContextMenu(timelineItem: timelineItem)
		}
    }
}