import Foundation

struct SRVRecord: Codable & Equatable {
    let priority: Int
    let weight: Int
    let port: Int
    let target: String
    let isSecure: Bool

    init?(data: Data) {
        guard data.count > 6 else {
            return nil
        }
        priority = Int(data[0]) * 256 + Int(data[1])
        weight = Int(data[2]) * 256 + Int(data[3])
        port = Int(data[4]) * 256 + Int(data[5])

        var workingTarget = ""
        for byte in data[7 ... (data.count - 1)] {
            var symbol = byte
            symbol = symbol < 33 ? 46 : symbol
            let char = String(decoding: Data([symbol]), as: UTF8.self)
            workingTarget += char
        }
        target = workingTarget
        isSecure = target.starts(with: "xmpps")
    }

    init(fallbackTarget: String) {
        target = fallbackTarget
        port = 5222
        priority = 0
        weight = 0
        isSecure = false
    }

    var description: String {
        "target: \(target) port: \(port) priority: \(priority) weight: \(weight)"
    }
}