// RadioSource interface contract (JSDoc-typed, no class needed).
// Every network adapter under src/sources/ MUST conform to this shape.
// Lock this at end of Tier 1 — drift breaks every subsequent adapter.

/**
 * @typedef {Object} Station
 * @property {string}   id           Namespaced identifier, e.g. "somafm:groovesalad"
 * @property {string}   sourceId     The network adapter id, e.g. "somafm"
 * @property {string}   name         Display name shown in the popup
 * @property {string}   description  Short blurb
 * @property {string}   genre        Comma-separated genres or single tag
 * @property {string}   artworkUrl   Square artwork URL (or empty string)
 * @property {string[]} streamUrls   Resolved direct stream URLs, ordered by preference
 */

/**
 * @typedef {Object} NowPlaying
 * @property {string}  title
 * @property {string}  artist
 * @property {string} [album]
 */

/**
 * @typedef {Object} RadioSource
 * @property {string} id           Adapter id, e.g. "somafm"
 * @property {string} displayName  Human-readable network name
 * @property {() => Promise<Station[]>}                     listStations
 * @property {(station: Station) => Promise<NowPlaying|null>} getNowPlaying
 * @property {(station: Station) => Promise<string>}        resolveStreamUrl
 */

// This file is intentionally documentation-only at runtime.
// Importing it has no side effects.
export {};
