# ResolveURL Sorting Algorithm (Kotlin Translation)

Translated from Kodi ResolveURL plugin's `real_debrid.py` and `torbox.py` resolvers.
Used by `ResolverOverlay.kt` to sort Debrid hash options.

## Priority Matrix

```
1. isCached?          → cached files always first
2. Resolution          → 2160p > 1440p > 1080p > 720p > 480p > lower
3. HDR / Dolby Vision  → HDR or DV present ranks above SDR at same resolution
4. File Size (bytes)   → larger files rank higher (REMUX preference)
5. Audio Codec         → Atmos > TrueHD > DTS-HD > DTS > EAC3 > AAC (tiebreaker)
```

## Kotlin Implementation

```kotlin
fun List<DebridFileOption>.sortedByResolveUrlPriority(): List<DebridFileOption> {
    return sortedWith(
        compareByDescending<DebridFileOption> { it.isCached }
            .thenByDescending { it.resolutionRank() }
            .thenByDescending { it.hasHdr || it.hasDolbyVision }
            .thenByDescending { it.fileSizeBytes }
            .thenByDescending { it.audioCodecRank() }
    )
}

fun DebridFileOption.resolutionRank(): Int = when {
    resolution.contains("4K") || resolution.contains("2160") -> 6
    resolution.contains("1440") -> 5
    resolution.contains("1080") -> 4
    resolution.contains("720") -> 3
    resolution.contains("480") || resolution.contains("SD") -> 2
    else -> 1
}

fun DebridFileOption.audioCodecRank(): Int = when {
    audioCodec.contains("Atmos", ignoreCase = true) -> 6
    audioCodec.contains("TrueHD", ignoreCase = true) -> 5
    audioCodec.contains("DTS-HD", ignoreCase = true) -> 4
    audioCodec.contains("DTS", ignoreCase = true) -> 3
    audioCodec.contains("EAC3") || audioCodec.contains("DD+") -> 2
    audioCodec.contains("AAC", ignoreCase = true) -> 1
    else -> 0
}
```

## Cache Detection

Real-Debrid `/torrents/instantAvailability` endpoint returns a hash→availability map.
TorBox API returns `cached: boolean` per file.
The `isCached` flag on `DebridFileOption` is set by the caller (ViewModel) based on API response.
