import Foundation
import SwiftUI

public struct ScaleButtonStyle: ButtonStyle {
    private let scaleAmount: CGFloat
    private let minimumOpacity: CGFloat
    private let animationDuration: Double
    @Binding var isPressed: Bool

    public init(scaleAmount: CGFloat = 0.9, minimumOpacity: CGFloat = 1.0, animationDuration: Double = 0.2, isPressed: Binding<Bool> = .constant(false)) {
        self.scaleAmount = scaleAmount
        self.minimumOpacity = minimumOpacity
        self.animationDuration = animationDuration
        self._isPressed = isPressed
    }

    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .scaleEffect(configuration.isPressed ? scaleAmount : 1)
            .opacity(configuration.isPressed ? minimumOpacity : 1)
            .animation(.smooth(duration: animationDuration), value: configuration.isPressed)
            .onChange(of: configuration.isPressed) {
                self.isPressed = configuration.isPressed
            }
    }
}
