SetInfoCommandHandler.kt

package de.pflugradts.passbird.application.commandhandling.handler
import de.pflugradts.passbird.application.UserInterfaceAdapterPort
import de.pflugradts.passbird.application.commandhandling.capabilities.CanPrintInfo
import de.pflugradts.passbird.application.commandhandling.command.SetInfoCommand
import de.pflugradts.passbird.application.configuration.ReadableConfiguration
class SetInfoCommandHandler constructor(
    private val canPrintInfo: CanPrintInfo,
    private val configuration: ReadableConfiguration,
    private val userInterfaceAdapterPort: UserInterfaceAdapterPort,
) : TypedCommandHandler<SetInfoCommand>(SetInfoCommand::class.java) {
    override fun handleCommand(@Suppress("UNUSED_PARAMETER") command: SetInfoCommand) {
        with(canPrintInfo) {
            userInterfaceAdapterPort.send(
                outBold("\n0: Default\n"),
                out("\t${configuration.application.password.length} characters"),
                out(if (configuration.application.password.specialCharacters) "" else "\n\tno special characters"),
            )
            configuration.application.password.customPasswordConfigurations.forEachIndexed { index, it ->
                userInterfaceAdapterPort.send(
                    outBold("${index + 1}: ${it.name}\n"),
                    out("\t${it.length} characters"),
                )
                if (!it.hasNumbers) userInterfaceAdapterPort.send(out("\tno numbers"))
                if (!it.hasLowercaseLetters && !it.hasUppercaseLetters) {
                    userInterfaceAdapterPort.send(out("\tno letters"))
                } else if (!it.hasLowercaseLetters) {
                    userInterfaceAdapterPort.send(out("\tno lowercase letters"))
                } else if (!it.hasUppercaseLetters) {
                    userInterfaceAdapterPort.send(out("\tno uppercase letters"))
                }
                if (!it.hasSpecialCharacters) {
                    userInterfaceAdapterPort.send(out("\tno special characters"))
                } else if (it.unusedSpecialCharacters.isNotEmpty()) {
                    userInterfaceAdapterPort.send(out("\tunused special characters: ${it.unusedSpecialCharacters}"))
                }
            }
            userInterfaceAdapterPort.send(
                outBold("\nAvailable Set commands:\n"),
                outBold("\n\ts?"),
                out(" (help)                  Displays an overview of available password configurations.\n"),
                outBold("\n\ts[EggId]"),
                out(" (set)             Sets a random password for the specified EggId using the default configuration."),
                outBold("\n\ts*[EggId]"),
                out(" (set once)   Sets a random password for the specified EggId using a one-time configuration."),
                outBold("\n\ts[1-9][EggId]"),
                out(" (set custom) Sets a random password for the specified EggId using a custom configuration."),
                out("\n"),
            )
        }
    }
}