# HorrorTV

A horror movie streaming app for Android TV and Chromecast with Google TV 4K.

## Features

- **Featured Horror Categories**: Browse curated horror movie collections (Scream, Halloween, Conjuring, Exorcist, Nightmare, Insidious, Terrifier, Hereditary, It, Poltergeist, Saw, Paranormal)
- **Search Movies**: Search by movie name or IMDB ID (e.g., `tt1234567`)
- **WebView Streaming**: Stream movies via playimdb.com integration
- **TV-Optimized UI**: Built with Jetpack Compose for TV with D-pad navigation support
- **Movie Details**: View plot, year, rating, and poster information from OMDb API

## Tech Stack

| Category | Technology |
|----------|------------|
| Language | Kotlin |
| UI Framework | Jetpack Compose for TV (tv-foundation, tv-material) |
| Networking | Retrofit + OkHttp + Gson |
| Image Loading | Coil |
| Dependency Injection | Hilt |
| Architecture | MVVM with Clean Architecture layers |
| API | OMDb API |

## Project Structure

```
HorrorTV/
├── app/
│   ├── src/main/
│   │   ├── java/com/horrortv/app/
│   │   │   ├── data/
│   │   │   │   ├── remote/omdb/         # OMDb API service & DTOs
│   │   │   │   └── repository/          # Repository implementations
│   │   │   ├── di/                      # Hilt modules
│   │   │   ├── domain/
│   │   │   │   ├── model/               # Domain models (Movie)
│   │   │   │   └ repository/            # Repository interfaces
│   │   │   ├── presentation/
│   │   │   │   ├── home/                # Home screen, rows, cards
│   │   │   │   ├── search/              # Search screen & ViewModel
│   │   │   │   ├── detail/              # Movie detail screen
│   │   │   │   ├── player/              # WebView streaming player
│   │   │   │   └ theme/                # Horror-themed colors, typography
│   │   │   ├── util/                    # Constants, utilities
│   │   │   └── MainApplication.kt       # Hilt entry point
│   │   ├── res/
│   │   │   ├── drawable/                # Launcher background
│   │   │   ├── mipmap/                  # App icons & banner
│   │   │   └ values/strings.xml         # App name
│   │   └ AndroidManifest.xml           # TV features & activities
│   ├── build.gradle.kts                 # App dependencies
│   └ proguard-rules.pro
├── gradle/
│   └ wrapper/gradle-wrapper.properties
├── build.gradle.kts                     # Project config
├── settings.gradle.kts
└ .gitignore
```

## How to Build

### Prerequisites

- Android Studio with Android SDK 34
- JDK 17
- Gradle 8.x

### Build Commands

```bash
# Debug APK
./gradlew assembleDebug

# Release APK
./gradlew assembleRelease

# Clean build
./gradlew clean assembleDebug

# Install on connected device
./gradlew installDebug
```

On Windows:
```powershell
gradlew.bat assembleDebug
```

## How to Install on Chromecast 4K

1. **Enable Developer Options**:
   - Go to Settings → System → About
   - Click on "Build" 7 times until "Developer options unlocked"

2. **Enable ADB Debugging**:
   - Settings → System → Developer options → ADB debugging → On

3. **Connect via ADB**:
   ```bash
   # Find Chromecast IP in Settings → Network → WiFi
   adb connect <CHROMECAST_IP>:5555
   ```

4. **Install APK**:
   ```bash
   adb install -r app/build/outputs/apk/debug/app-debug.apk
   ```

5. **Launch App**:
   - The app will appear in your Apps section on Chromecast
   - Select "HorrorTV" from the home screen

## API Configuration

The app uses the **OMDb API** to fetch movie metadata:

- **API Key**: `5854c81e` (hardcoded in `Constants.kt`)
- **Base URL**: `https://www.omdbapi.com/`

To use your own API key, modify `Constants.kt`:
```kotlin
const val OMDB_API_KEY = "your_api_key_here"
```

Get a free API key at: https://www.omdbapi.com/apikey.aspx

## Usage

### Navigation

| Action | D-Pad Control |
|--------|---------------|
| Move focus | Arrow keys (Up/Down/Left/Right) |
| Select | Center button (Enter) |
| Back | Back button |
| Search | Search button or menu |

### Features

1. **Browse Categories**: Navigate through horror movie rows using Up/Down arrows
2. **View Movie**: Press Select on a movie poster to see details
3. **Play Movie**: Press Play button on detail screen to stream via WebView
4. **Search**: Access search from the top menu, type movie name or IMDB ID

### IMDB ID Search

Enter an IMDB ID in the format `tt1234567` or `tt12345678` to find specific movies.

## Architecture

The app follows Clean Architecture principles:

- **Presentation Layer**: Jetpack Compose TV UI with ViewModels
- **Domain Layer**: Business models and repository interfaces
- **Data Layer**: OMDb API implementation and repository

Dependency flow: Presentation → Domain → Data

## License

This project is for educational purposes. Movie streaming via playimdb.com may require appropriate licensing in your region.