Public/Get-SatRelease.ps1

function Get-SatRelease {
    <#
    .SYNOPSIS
        Gets detailed information about a specific release from srrDB.

    .DESCRIPTION
        Retrieves comprehensive details about a scene release from the srrDB database,
        including file information, archive details, and metadata.

    .PARAMETER ReleaseName
        The release dirname to look up. This is the exact scene release name.
        Supports pipeline input.

    .EXAMPLE
        Get-SatRelease -ReleaseName "Inception.2010.1080p.BluRay.x264-SPARKS"

        Gets detailed information about the specified release.

    .EXAMPLE
        Search-SatRelease -Query "Inception" | Get-SatRelease

        Searches for releases and pipes them to get full details.

    .EXAMPLE
        "Inception.2010.1080p.BluRay.x264-SPARKS" | Get-SatRelease

        Gets release details using pipeline input.

    .OUTPUTS
        PSCustomObject with release details including:
        - Name: Release dirname
        - Files: Array of files in the release
        - Archived: Array of archive files
        - ArchivedFiles: Files within archives
        - SrrSize: Size of the SRR file
        - HasNfo: Boolean indicating NFO availability
        - HasSrs: Boolean indicating SRS availability
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [Alias('Release')]
        [ValidateNotNullOrEmpty()]
        [string]
        $ReleaseName
    )

    process {
        try {
            $encodedRelease = [System.Uri]::EscapeDataString($ReleaseName)
            $endpoint = "/details/$encodedRelease"
            $uri = Join-SatUri -Endpoint $endpoint

            Write-Verbose "Getting release details: $uri"

            $result = Invoke-SatApi -Uri $uri -ErrorAction 'Stop'

            # Check for API errors
            if ($result.error) {
                throw "srrDB API error: $($result.error)"
            }

            # Check if release was found
            if (-not $result.name) {
                Write-Warning "Release not found: $ReleaseName"
                return
            }

            # Build release object
            $releaseObj = [PSCustomObject]@{
                PSTypeName    = 'SrrDBAutomationToolkit.Release'
                Name          = $result.name
                Files         = $result.files
                Archived      = $result.archived
                ArchivedFiles = $result.'archived-files'
                SrrSize       = $result.'srr-size'
                HasNfo        = [bool]($result.hasNFO -eq 'yes' -or $result.nfo)
                HasSrs        = [bool]($result.hasSRS -eq 'yes' -or $result.srs)
            }

            $releaseObj
        }
        catch {
            throw "Failed to get release details for '$ReleaseName': $($_.Exception.Message)"
        }
    }
}