import Foundation enum ProtocolType: String, Codable, CaseIterable, Identifiable { case ssh = "SSH" case sftp = "SFTP" case rdp = "RDP" case vnc = "VNC" var id: String { rawValue } var defaultPort: Int { switch self { case .ssh: return 22 case .sftp: return 22 case .rdp: return 3389 case .vnc: return 5900 } } var systemImage: String { switch self { case .ssh: return "terminal" case .sftp: return "folder" case .rdp: return "pccomputer" case .vnc: return "display" } } } struct ConnectionProfile: Codable, Identifiable, Hashable { var id: UUID = UUID() var name: String var proto: ProtocolType var host: String var port: Int var username: String var group: String var colorTag: String var resolution: String var sshKeyID: UUID? var passwordAccount: String? var extraArgs: String var lastConnected: Date? init( id: UUID = UUID(), name: String = "Neues Profil", proto: ProtocolType = .ssh, host: String = "", port: Int = 22, username: String = "", group: String = "Allgemein", colorTag: String = "blue", resolution: String = "Automatisch", sshKeyID: UUID? = nil, passwordAccount: String? = nil, extraArgs: String = "", lastConnected: Date? = nil ) { self.id = id self.name = name self.proto = proto self.host = host self.port = port self.username = username self.group = group self.colorTag = colorTag self.resolution = resolution self.sshKeyID = sshKeyID self.passwordAccount = passwordAccount self.extraArgs = extraArgs self.lastConnected = lastConnected } enum CodingKeys: String, CodingKey { case id, name, host, port, username, group, colorTag, resolution, sshKeyID, passwordAccount, extraArgs, lastConnected case proto = "protocol" } } struct StoredSSHKey: Codable, Identifiable, Hashable { var id: UUID = UUID() var name: String var privateKeyPath: String var publicKeyPath: String? var passphraseAccount: String? }