//
//  IconButton.swift
//  lichunWebsocket
//
//  Icon-based button component
//

import SwiftUI

struct IconButton: View {
    let iconName: String
    let action: () -> Void
    var size: CGFloat = AppSpacing.iconSizeMedium
    var color: Color = AppColors.primary
    var backgroundColor: Color? = nil

    var body: some View {
        Button(action: action) {
            Image(systemName: iconName)
                .font(.system(size: size))
                .foregroundColor(color)
                .frame(width: size + 16, height: size + 16)
                .background(backgroundColor ?? Color.clear)
                .cornerRadius(AppSpacing.smallCornerRadius)
        }
        // Bare icon buttons have no other tactile feedback, so opt into the
        // gentle soft press-down tick + subtle squish for a satisfying tap.
        .buttonStyle(SquishButtonStyle(pressHaptic: .soft))
    }
}

// MARK: - Preview
#if DEBUG
struct IconButton_Previews: PreviewProvider {
    static var previews: some View {
        HStack(spacing: AppSpacing.md) {
            IconButton(iconName: "heart.fill", action: {})
            IconButton(iconName: "star.fill", action: {}, color: .yellow)
            IconButton(iconName: "xmark", action: {}, backgroundColor: Color.white.opacity(0.2))
        }
        .padding()
        .background(Color.black)
    }
}
#endif
