// Copyright 2026 Leo Cheng
// SPDX-License-Identifier: Apache-2.0

///|
/// Build a master playlist and the media playlist it points at, print both, and
/// read them back to show that what was written is what is understood.
///
///     moon run src/examples/01-playlists
#coverage.skip
fn main raise {
  let media = @m3u8.MediaPlaylist::new(4)
  media.version = Some(7)
  media.playlist_type = Some(@m3u8.PlaylistType::Vod)
  media.independent_segments = true
  media.end_list = true
  let init = @m3u8.InitSection::new("init.mp4")
  for i = 0; i < 3; i = i + 1 {
    let segment = @m3u8.Segment::new("segment" + i.to_string() + ".m4s", 4.0)
    segment.map = Some(init)
    media.segments.push(segment)
  }
  let text = media.encode()
  println("media playlist")
  println(text)

  let master = @m3u8.Master::new()
  master.version = Some(7)
  master.independent_segments = true
  let variant = @m3u8.Variant::new("720p.m3u8", bandwidth=2_400_000)
  variant.resolution = Some(@m3u8.Resolution::new(1280, 720))
  variant.codecs = Some("avc1.64001f,mp4a.40.2")
  variant.frame_rate = Some(30.0)
  master.variants.push(variant)
  let master_text = master.encode()
  println("master playlist")
  println(master_text)

  // What was read has to be what was written: the same number of segments, each
  // with the initialisation section in front of it.
  let back = @m3u8.Playlist::parse(text).media().unwrap()
  println("segments read back: " + back.segments.length().to_string())
  println("first segment: " + back.segments[0].uri)
  println("initialisation: " + back.segments[0].map.unwrap().uri)
  let back_master = @m3u8.Playlist::parse(master_text).master().unwrap()
  println("variants read back: " + back_master.variants.length().to_string())
  println(
    "bandwidth: " + back_master.variants[0].bandwidth.unwrap().to_string(),
  )
}