///|
/// Select and reorder pictures without touching unrelated kinds or input arrays.
/// Serialization and full payload limits are checked by plan/encode_picture.
pub fn edit_pictures(
  pictures : Array[Picture],
  edits : Array[PictureEdit],
) -> Array[Picture] raise FlacError {
  let mut result = pictures.copy()
  for edit in edits {
    match edit {
      SetPicture(picture) => {
        validate_picture(picture)
        result = result.filter(p => p.kind != picture.kind)
        result.push(picture)
      }
      AddPicture(picture) => {
        validate_picture(picture)
        result.push(picture)
      }
      RemovePictureKind(kind) => {
        guard kind >= 0 && kind <= 20 else {
          raise Invalid(0, "reserved picture type")
        }
        result = result.filter(p => p.kind != kind)
      }
      ClearPictures => result = []
    }
    guard result.length() <= MaxBlocks else { raise Limit("too many pictures") }
  }
  let mut icon1 = false
  let mut icon2 = false
  for picture in result {
    validate_picture(picture)
    if picture.kind == 1 {
      guard !icon1 else { raise Invalid(0, "duplicate type 1 icon") }
      icon1 = true
    }
    if picture.kind == 2 {
      guard !icon2 else { raise Invalid(0, "duplicate type 2 icon") }
      icon2 = true
    }
  }
  result
}