source_api_ImageHelpers.bs

import "pkg:/source/api/Image.bs"
import "pkg:/source/utils/misc.bs"

' Generate poster URL from JellyfinBaseItem node
' Uses existing ImageURL() function with appropriate fallbacks
' @param item - JellyfinBaseItem content node
' @param maxHeight - Maximum height in pixels (default: 440)
' @param maxWidth - Maximum width in pixels (default: 295)
' @returns Image URL string or empty string if no image available
function GetPosterURLFromItem(item as object, maxHeight = 440 as integer, maxWidth = 295 as integer) as string
  if not isValid(item) then return ""

  imgParams = { "maxHeight": maxHeight, "maxWidth": maxWidth }

  ' Try primary image
  if isValidAndNotEmpty(item.primaryImageTag)
    imgParams["Tag"] = item.primaryImageTag
    return ImageURL(item.id, "Primary", imgParams)
  end if

  ' Try thumb image
  if isValidAndNotEmpty(item.thumbImageTag)
    imgParams["Tag"] = item.thumbImageTag
    return ImageURL(item.id, "Thumb", imgParams)
  end if

  ' Try parent primary image (for episodes, etc.)
  if isValidAndNotEmpty(item.parentPrimaryImageTag) and isValidAndNotEmpty(item.parentPrimaryImageItemId)
    imgParams["Tag"] = item.parentPrimaryImageTag
    return ImageURL(item.parentPrimaryImageItemId, "Primary", imgParams)
  end if

  ' Try parent thumb
  if isValidAndNotEmpty(item.parentThumbImageTag) and isValidAndNotEmpty(item.parentThumbItemId)
    imgParams["Tag"] = item.parentThumbImageTag
    return ImageURL(item.parentThumbItemId, "Thumb", imgParams)
  end if

  ' Try series primary (for episodes)
  if isValidAndNotEmpty(item.seriesPrimaryImageTag) and isValidAndNotEmpty(item.seriesId)
    imgParams["Tag"] = item.seriesPrimaryImageTag
    return ImageURL(item.seriesId, "Primary", imgParams)
  end if

  ' Try backdrop as last resort
  if isValid(item.backdropImageTags) and item.backdropImageTags.Count() > 0
    imgParams["Tag"] = item.backdropImageTags[0]
    return ImageURL(item.id, "Backdrop", imgParams)
  end if

  return ""
end function

' Generate backdrop URL from JellyfinBaseItem node
' @param item - JellyfinBaseItem content node
' @param maxHeight - Maximum height in pixels (default: 720)
' @param maxWidth - Maximum width in pixels (default: 1280)
' @returns Image URL string or empty string if no image available
function GetBackdropURLFromItem(item as object, maxHeight = 720 as integer, maxWidth = 1280 as integer) as string
  if not isValid(item) then return ""

  imgParams = { "maxHeight": maxHeight, "maxWidth": maxWidth }

  ' Try backdrop image
  if isValid(item.backdropImageTags) and item.backdropImageTags.Count() > 0
    imgParams["Tag"] = item.backdropImageTags[0]
    return ImageURL(item.id, "Backdrop", imgParams)
  end if

  ' Try parent backdrop
  if isValid(item.parentBackdropImageTags) and item.parentBackdropImageTags.Count() > 0 and isValidAndNotEmpty(item.parentBackdropItemId)
    imgParams["Tag"] = item.parentBackdropImageTags[0]
    return ImageURL(item.parentBackdropItemId, "Backdrop", imgParams)
  end if

  return ""
end function

' Generate logo URL from JellyfinBaseItem node
' @param item - JellyfinBaseItem content node
' @param maxHeight - Maximum height in pixels (default: 100)
' @param maxWidth - Maximum width in pixels (default: 300)
' @returns Image URL string or empty string if no image available
function GetLogoURLFromItem(item as object, maxHeight = 100 as integer, maxWidth = 300 as integer) as string
  if not isValid(item) then return ""

  imgParams = { "maxHeight": maxHeight, "maxWidth": maxWidth }

  ' Try logo image
  if isValidAndNotEmpty(item.logoImageTag)
    imgParams["Tag"] = item.logoImageTag
    return ImageURL(item.id, "Logo", imgParams)
  end if

  return ""
end function

' Generate user avatar URL from JellyfinUser node
' @param user - JellyfinUser content node
' @param maxHeight - Maximum height in pixels (default: 300)
' @param maxWidth - Maximum width in pixels (default: 300)
' @returns Image URL string or empty string if no image available
function GetUserAvatarURL(userObj as object, maxHeight = 300 as integer, maxWidth = 300 as integer) as string
  if not isValid(userObj) or not isValidAndNotEmpty(userObj.id) then return ""

  if not isValidAndNotEmpty(userObj.primaryImageTag) then return ""

  params = {
    "maxHeight": maxHeight,
    "maxWidth": maxWidth,
    "Tag": userObj.primaryImageTag
  }

  return UserImageURL(userObj.id, params)
end function