import SwiftUI

public struct PublicPrivateToggleStyleV1: ToggleStyle {
    public init() {}

    public func makeBody(configuration: Configuration) -> some View {
        Rectangle()
            .foregroundStyle(configuration.isOn ? Color.SemanticV1.iconLink : .SemanticV1.backgroundQuaternary)
            .frame(width: 42, height: 26, alignment: .center)
            .overlay(alignment: configuration.isOn ? .trailing : .leading) {
                Circle()
                    .foregroundColor(Color.SemanticV1.backgroundPrimary)
                    .padding(.all, 2)
                    .overlay(alignment: .center) {
                        icon(for: configuration)
                    }
                    .animation(.easeInOut(duration: 0.2), value: configuration.isOn)
            }
            .cornerRadius(16)
            .onTapGesture { configuration.isOn.toggle() }
    }

    private func icon(for configuration: Configuration) -> some View {
        let icon = configuration.isOn ? ImageResource.globe : .lockV1
        let color = configuration.isOn ? Color.SemanticV1.iconLink : .SemanticV1.iconBrand
        let size: CGFloat = configuration.isOn ? 18 : 12

        return Image(icon)
            .resizable()
            .foregroundColor(color)
            .scaledToFit()
            .frame(width: size)
    }
}

struct PublicPrivateToggleStyleV1_Previews: PreviewProvider {
    static var previews: some View {
        PublicPrivateToggleStyleSampleV1()
    }
}

struct PublicPrivateToggleStyleSampleV1: View {
    var body: some View {
        VStack {
            Toggle(isOn: .constant(false)) {}
                .toggleStyle(PublicPrivateToggleStyleV1())
                .labelsHidden()

            Toggle(isOn: .constant(true)) {}
                .toggleStyle(PublicPrivateToggleStyleV1())
                .labelsHidden()
        }
        .padding()
    }
}
