import SwiftUI

struct MenuHeaderCard<Content: View>: View {
    let title: String
    let subtitle: String
    let statusText: String?
    let paddingBottom: CGFloat
    @ViewBuilder var content: Content

    init(
        title: String,
        subtitle: String,
        statusText: String? = nil,
        paddingBottom: CGFloat = 6,
        @ViewBuilder content: () -> Content = { EmptyView() })
    {
        self.title = title
        self.subtitle = subtitle
        self.statusText = statusText
        self.paddingBottom = paddingBottom
        self.content = content()
    }

    var body: some View {
        VStack(alignment: .leading, spacing: 6) {
            HStack(alignment: .firstTextBaseline) {
                Text(self.title)
                    .font(.caption.weight(.semibold))
                    .foregroundStyle(.secondary)
                Spacer(minLength: 10)
                Text(self.subtitle)
                    .font(.caption)
                    .foregroundStyle(.secondary)
            }

            if let statusText, !statusText.isEmpty {
                Text(statusText)
                    .font(.caption)
                    .foregroundStyle(.secondary)
                    .lineLimit(1)
                    .truncationMode(.tail)
            }
            self.content
        }
        .padding(.top, 8)
        .padding(.bottom, self.paddingBottom)
        .padding(.leading, 20)
        .padding(.trailing, 10)
        .frame(minWidth: 300, maxWidth: .infinity, alignment: .leading)
        .transaction { txn in txn.animation = nil }
    }
}
