public struct OpenClawChatAudioInputDevice: Equatable, Identifiable, Sendable {
    public var id: String
    public var name: String

    public init(id: String, name: String) {
        self.id = id
        self.name = name
    }
}

public enum OpenClawCameraFacingSelection: String, Equatable, Sendable {
    case back
    case front
}

public struct OpenClawChatTalkControl {
    public var isEnabled: Bool
    public var isListening: Bool
    public var isSpeaking: Bool
    public var isGatewayConnected: Bool
    public var statusText: String
    public var providerLabel: String
    public var level: Double
    public var partialTranscript: String
    public var recentTranscript: [String]
    public var inputDevices: [OpenClawChatAudioInputDevice]
    public var selectedInputDeviceID: String?
    public var selectInputDevice: (@MainActor (_ deviceID: String?) -> Void)?
    public var cameraFacing: OpenClawCameraFacingSelection?
    public var flipCamera: (@MainActor () -> Void)?
    public var toggle: @MainActor (_ sessionKey: String) -> Void

    public init(
        isEnabled: Bool,
        isListening: Bool,
        isSpeaking: Bool,
        isGatewayConnected: Bool,
        statusText: String,
        providerLabel: String,
        level: Double = 0,
        partialTranscript: String = "",
        recentTranscript: [String] = [],
        inputDevices: [OpenClawChatAudioInputDevice] = [],
        selectedInputDeviceID: String? = nil,
        selectInputDevice: (@MainActor (_ deviceID: String?) -> Void)? = nil,
        cameraFacing: OpenClawCameraFacingSelection? = nil,
        flipCamera: (@MainActor () -> Void)? = nil,
        toggle: @escaping @MainActor (_ sessionKey: String) -> Void)
    {
        self.isEnabled = isEnabled
        self.isListening = isListening
        self.isSpeaking = isSpeaking
        self.isGatewayConnected = isGatewayConnected
        self.statusText = statusText
        self.providerLabel = providerLabel
        self.level = level
        self.partialTranscript = partialTranscript
        self.recentTranscript = recentTranscript
        self.inputDevices = inputDevices
        self.selectedInputDeviceID = selectedInputDeviceID
        self.selectInputDevice = selectInputDevice
        self.cameraFacing = cameraFacing
        self.flipCamera = flipCamera
        self.toggle = toggle
    }
}
