import ComponentLibrary
import Foundation
import SwiftUI
import Utilities

public struct MenuMultiRowElement<IconView: View>: View {
    let icon: IconView
    let title: String
    let flagWarning: Bool
    let action: () -> Void

    public init(
        title: String,
        flagWarning: Bool = false,
        @ViewBuilder icon: () -> IconView,
        action: @escaping () -> Void = {}
    ) {
        self.icon = icon()
        self.title = title
        self.action = action
        self.flagWarning = flagWarning
    }

    public var body: some View {
        Button {
            action()
        } label: {
            VStack {
                icon
                    .frame(width: 24, height: 24)
                    .foregroundStyle(flagWarning ? Color.SemanticV2.accentError : Color.SemanticV2.foregroundPrimary)
                Text(title)
                    .font(TypographyV1.bodySmall.font)
                    .foregroundStyle(flagWarning ? Color.SemanticV2.accentError : Color.SemanticV2.foregroundPrimary)

            }.frame(minWidth: 0, maxWidth: .infinity)
                .padding()
                .background(Color.SemanticV1.backgroundSecondary)
                .clipShape(RoundedRectangle(cornerRadius: 10))
        }
    }
}

public extension MenuMultiRowElement where IconView == EmptyView {
    init(
        title: String,
        action: @escaping () -> Void
    ) {
        self.init(
            title: title,
            icon: { EmptyView() },
            action: action
        )
    }
}

public extension MenuMultiRowElement where IconView == Image {
    init(
        title: String,
        icon: Image,
        action: @escaping () -> Void
    ) {
        self.init(
            title: title,
            icon: { icon },
            action: action
        )
    }
}
