package com.fabledsword.minstrel.player.output.upnp

import okhttp3.HttpUrl

/**
 * A discovered UPnP / DLNA MediaRenderer (Sonos, Yamaha MusicCast,
 * Bose SoundTouch, generic DLNA renderers). Lifted out of the SOAP /
 * SSDP details so the picker UI consumes a narrow domain shape.
 *
 * Sonos devices additionally populate [zoneGroupTopologyControlUrl] from the
 * ZoneGroupTopology service in their device description; non-Sonos devices
 * leave it null. The discovery controller uses that URL to aggregate stereo
 * pairs and multi-speaker groups into single picker rows.
 *
 * [id] is the device UDN (e.g. `uuid:RINCON_ABC...`). [name] is the
 * raw `<friendlyName>` straight from the device description — callers
 * fall back to "Network speaker" upstream when it's blank; this class
 * does not perform that substitution itself.
 */
data class UpnpRoute(
    val id: String,
    val name: String,
    val manufacturer: String,
    val modelName: String,
    val avTransportControlUrl: HttpUrl,
    val renderingControlUrl: HttpUrl?,
    val zoneGroupTopologyControlUrl: HttpUrl? = null,
)
