UserInterfaceAdapterPort.kt

package de.pflugradts.passbird.application

import de.pflugradts.passbird.domain.model.transfer.Input
import de.pflugradts.passbird.domain.model.transfer.Output
import de.pflugradts.passbird.domain.model.transfer.Output.Companion.emptyOutput

interface UserInterfaceAdapterPort {
    fun receive(vararg output: Output): Input
    fun receive(): Input = receive(emptyOutput())
    fun receiveSecurely(output: Output): Input
    fun receiveSecurely(): Input = receiveSecurely(emptyOutput())
    fun send(vararg output: Output)
    fun sendLineBreak() = send(emptyOutput())
    fun receiveConfirmation(output: Output) =
        receive(output).run { !isEmpty && data.isEmpty && command.size == 1 && command.firstByte == 'c'.code.toByte() }

    fun receiveYes(output: Output) = receive(output).run {
        !isEmpty && data.isEmpty && command.size == 1 &&
            (command.firstByte == 'Y'.code.toByte() || command.firstByte == 'y'.code.toByte())
    }
    fun warningSound()
}