import SwiftUI

struct DevMenuActionButton: View {
  let title: String
  let icon: String
  let action: () -> Void
  let disabled: Bool

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

  var body: some View {
    Button { action() }
    label: {
      HStack {
        Image(systemName: icon)
          .frame(width: 24, height: 24)
          .foregroundColor(disabled ? .secondary : .primary)
          .opacity(0.6)

        Text(title)
          .foregroundColor(disabled ? .secondary : .primary)

        Spacer()
      }
      .padding()
    }
    .disabled(disabled)
    .background(Color.expoSecondarySystemBackground)
    .opacity(disabled ? 0.6 : 1.0)
  }
}

struct DevMenuToggleButton: View {
  let title: String
  let icon: String
  let isEnabled: Bool
  let action: () -> Void
  let disabled: Bool

  init(title: String, icon: String, isEnabled: Bool, action: @escaping () -> Void, disabled: Bool = false) {
    self.title = title
    self.icon = icon
    self.isEnabled = isEnabled
    self.action = action
    self.disabled = disabled
  }

  var body: some View {
    HStack {
      Image(systemName: icon)
        .frame(width: 24, height: 24)
        .foregroundColor(disabled ? .secondary : .primary)
        .opacity(0.6)

      Text(title)
        .foregroundColor(disabled ? .secondary : .primary)
        .lineLimit(1)
        .minimumScaleFactor(0.8)

      Spacer()

      Toggle("", isOn: Binding(
        get: { isEnabled && !disabled },
        set: { _ in if !disabled { action() } }
      ))
      .disabled(disabled)
    }
    .padding()
    .background(Color.expoSecondarySystemBackground)
    .opacity(disabled ? 0.6 : 1.0)
  }
}
