import SwiftUI

public struct VersioningToggle: View {
    let isToggledToV4: Bool
    let tapAction: () -> Void

    public init(isToggledToV4: Bool, tapAction: @escaping () -> Void) {
        self.isToggledToV4 = isToggledToV4
        self.tapAction = tapAction
    }

    public var body: some View {
        ZStack {
            HStack(spacing: .zero) {
                Text("v3.5")
                    .typographyV1(.body1)
                    .foregroundStyle(Color.SemanticV1.textPrimary.opacity(isToggledToV4 ? 0.5 : 1.0))
                    .frame(height: 32.0)
                    .padding(.leading, 6.0)
                    .padding(.trailing, 8.0)
                    .background {
                        Color.clear
                    }
                    .clipShape(.rect(cornerRadius: 6.0))

                ZStack {
                    Text("v3.5")
                        .typographyV1(.body1)
                        .foregroundStyle(Color.clear)
                        .frame(height: 32.0)
                        .padding(.horizontal, 4.0)
                        .overlay {
                            Text("v4")
                                .typographyV1(.body1)
                                .foregroundStyle(
                                    isToggledToV4 ?
                                        Color.SemanticV1.alwaysBlack1 :
                                        Color.SemanticV1.textPrimary.opacity(0.5)
                                )
                                .frame(height: 32.0)
                        }
                }
            }
        }
        .padding(.all, 2.0)
        .background {
            ZStack {
                Color.SemanticV1.backgroundSecondary
                HStack(spacing: .zero) {
                    if isToggledToV4 {
                        Spacer()
                    }

                    Text("v3.5")
                        .typographyV1(.body1)
                        .foregroundStyle(Color.clear)
                        .frame(height: 32.0)
                        .padding(.leading, isToggledToV4 ? 4.0 : 6.0)
                        .padding(.trailing, isToggledToV4 ? 4.0 : 8.0)
                        .background {
                            RoundedRectangle(cornerRadius: 6.0)
                                .fill(
                                    isToggledToV4 ?
                                        Color.SemanticV1.v4Accent :
                                        Color.SemanticV1.backgroundQuaternary
                                )
                        }

                    if !isToggledToV4 {
                        Spacer()
                    }
                }
                .padding(.all, 2.0)
            }
        }
        .clipShape(.rect(cornerRadius: 8.0))
        .animation(.easeInOut, value: isToggledToV4)
        .onTapGesture {
            UIImpactFeedbackGenerator(style: .light).impactOccurred()
            tapAction()
        }
    }
}
