# TMDB Feature Port — 2026-05-31

## What Was Ported from NuvioTV to Unspooled

### 1. TmdbService (IMDB↔TMDB bidirectional caching)
- **NuvioTV:** `TmdbService.kt` (294 lines)
- **Unspooled:** new `TmdbService.kt`
- **Key patterns:**
  - `ConcurrentHashMap<String, Int>` for imdbToTmdbCache
  - `ConcurrentHashMap<Int, String>` for tmdbToImdbCache  
  - `ConcurrentHashMap<String, CompletableDeferred<Int?>>` for in-flight dedup
  - `Mutex` for thread-safe bidirectional cache population
  - Normalizes media type: "series"/"tv"/"show" → "tv", "movie"/"film" → "movie"

### 2. TmdbMetadataService upgrade (408 → ~340 lines, leaner but feature-complete)
- **Before:** basic credits, videos, images enrichment
- **After:** director/crew/writer members, trailer ranking with language fallback, batch episode enrichment per season list, more-like-this, person detail, `CompletableDeferred` in-flight dedup
- **Data classes changed:** `TmdbEnrichment` went from nested `details`/`credits`/`videos`/`images` to flat `description`/`genres`/`castMembers`/`directorMembers`/`writerMembers`/`trailers`
- **Consumer update needed:** `DetailsViewModel.enrichMetaItem()` and `tryBuildMetaFromEnrichment()` updated to use new flat API

### 3. PersonDetailScreen + PersonViewModel
- **New files:** `ui/screens/person/PersonDetailScreen.kt`, `ui/screens/person/PersonViewModel.kt`
- **Route:** `Screen.PersonDetail` with `person/{personId}/{personName}` URL
- **Composable entry:** added to `UnspooledNavHost`
- Person profile with photo, name, TMDB ID, "Known For" card row

### 4. Batch episode enrichment
- `fetchEpisodeEnrichment(tmdbId, seasonNumbers: List<Int>)` — fetches entire season in one call
- Old API `(seasonNumber: Int, episodeNumber: Int)` removed

## Build State
- Compile: `BUILD SUCCESSFUL`
- Tests: 166 passed, 1 pre-existing network test failure (AIOStreams manifest)
- APK: `app/build/outputs/apk/debug/app-debug.apk`

## Project Rename
- **Directory:** `/home/rurouni/Mr.VHS` → `/home/rurouni/Unspooled`
- **Package:** `com.nexstream.app` → `com.unspooled.app`
- **GitHub:** `https://github.com/ramon-gonzalez-jr/unspooled`
- 337 files updated with content replacements, 10+ files renamed
- Room schemas fixed to reference `UnspooledDatabase`
