# API REST para Videos - Plusmovie

Esta API REST permite obtener información de videos por IMDB/TMDB ID, temporadas y registrar episodios.

## Estructura del Proyecto

```
plusmovie/
├── api.php          # Archivo principal de la API
├── README.md        # Este archivo
└── db/
    ├── config.php   # Configuración de la base de datos
    └── Database.php # Clase de conexión a la base de datos
```

## Configuración de Base de Datos

- **Host:** localhost
- **Puerto:** 3306
- **Base de datos:** docinesx_panel
- **Usuario:** docinesx_anibal
- **Contraseña:** anibal5083038xS

## Endpoints Disponibles

### 1. Obtener Video por IMDB ID

**URL:** `https://api.docines.xyz/plusmovie/api.php?action=get_video_by_imdb&imdbid=VALOR`

**Método:** GET

**Parámetros:**
- `imdbid` (requerido): ID de IMDB que debe comenzar con "tt"

**Ejemplo:**
```
https://api.docines.xyz/plusmovie/api.php?action=get_video_by_imdb&imdbid=tt1234567
```

**Respuesta exitosa:**
```json
{
  "success": true,
  "data": {
    "id": "1"
  }
}
```

**Respuesta sin resultados:**
```json
{
  "success": false,
  "message": "Video no encontrado"
}
```

### 2. Obtener Video por TMDB ID

**URL:** `https://api.docines.xyz/plusmovie/api.php?action=get_video_by_tmdb&tmdbid=VALOR`

**Método:** GET

**Parámetros:**
- `tmdbid` (requerido): ID numérico de TMDB

**Ejemplo:**
```
https://api.docines.xyz/plusmovie/api.php?action=get_video_by_tmdb&tmdbid=12345
```

**Respuesta exitosa:**
```json
{
  "success": true,
  "data": {
    "id": "1"
  }
}
```

### 3. Obtener Temporadas por Videos ID

**URL:** `https://api.docines.xyz/plusmovie/api.php?action=get_seasons&videos_id=VALOR`

**Método:** GET

**Parámetros:**
- `videos_id` (requerido): ID del video

**Ejemplo:**
```
https://api.docines.xyz/plusmovie/api.php?action=get_seasons&videos_id=1
```

**Respuesta:**
```json
{
  "success": true,
  "data": [
    {
      "seasons_id": "1",
      "seasons_name": "Temporada 1",
      "order": "1"
    },
    {
      "seasons_id": "2",
      "seasons_name": "Temporada 2",
      "order": "2"
    }
  ]
}
```

### 4. Registrar Episodio

**URL:** `https://api.docines.xyz/plusmovie/api.php?action=add_episode`

**Método:** POST

**Content-Type:** application/json

**Parámetros del cuerpo (JSON):**
- `videos_id` (requerido): ID del video
- `seasons_id` (requerido): ID de la temporada
- `episodes_name` (requerido): Nombre del episodio
- `file_source` (requerido): Fuente del archivo
- `file_url` (requerido): URL del archivo
- `order` (opcional): Orden del episodio (por defecto 1)

**Valores automáticos:**
- `stream_key`: Se genera automáticamente (12 caracteres alfanuméricos)
- `source_type`: "link" (predeterminado)
- `date_added`: timestamp actual
- `last_ep_added`: timestamp actual

**Ejemplo de petición:**
```json
{
  "videos_id": "1",
  "seasons_id": "1",
  "episodes_name": "Episodio 1: El Comienzo",
  "file_source": "StreamTape",
  "file_url": "https://streamtape.com/v/abc123",
  "order": 1
}
```

**Respuesta exitosa:**
```json
{
  "success": true,
  "message": "Episodio agregado correctamente",
  "id": "123",
  "stream_key": "00h5vl4wlubu"
}
```

**Respuesta de error:**
```json
{
  "success": false,
  "message": "Error al agregar el episodio"
}
```

## Códigos de Estado HTTP

- `200`: Éxito
- `400`: Solicitud incorrecta (parámetros faltantes o inválidos)
- `404`: Endpoint no encontrado
- `405`: Método no permitido
- `500`: Error interno del servidor

## Validaciones Especiales

### IMDB ID
- Debe comenzar con "tt" (ejemplo: tt1234567)
- Si no comienza con "tt", retorna error 400

### TMDB ID
- Debe ser un valor numérico
- Si no es numérico, retorna error 400

### Stream Key
- Se genera automáticamente con 12 caracteres alfanuméricos en minúsculas
- Ejemplos: `00h5vl4wlubu`, `073el5dkxpqb`

## Cómo probar desde el navegador

### Para endpoints GET:
Simplemente copia y pega las URLs en tu navegador reemplazando "VALOR" con los datos reales.

**Ejemplos prácticos:**
```
# Buscar por IMDB ID
https://api.docines.xyz/plusmovie/api.php?action=get_video_by_imdb&imdbid=tt0111161

# Buscar por TMDB ID
https://api.docines.xyz/plusmovie/api.php?action=get_video_by_tmdb&tmdbid=278

# Obtener temporadas
https://api.docines.xyz/plusmovie/api.php?action=get_seasons&videos_id=1
```

### Para endpoint POST (add_episode):
Necesitarás usar una herramienta como Postman, curl, o un formulario HTML con JavaScript.

**Ejemplo con curl:**
```bash
curl -X POST https://api.docines.xyz/plusmovie/api.php?action=add_episode \
  -H "Content-Type: application/json" \
  -d '{
    "videos_id": "1",
    "seasons_id": "1",
    "episodes_name": "Episodio 1: El Comienzo",
    "file_source": "StreamTape",
    "file_url": "https://streamtape.com/v/abc123",
    "order": 1
  }'
```

## Estructura de Base de Datos Esperada

### Tabla `videos`
- `id` (PRIMARY KEY)
- `imdbid` (debe comenzar con "tt")
- `tmdbid` (numérico)

### Tabla `seasons`
- `seasons_id` (PRIMARY KEY)
- `videos_id` (FOREIGN KEY)
- `seasons_name`
- `order`

### Tabla `episodes`
- `id` (PRIMARY KEY)
- `stream_key` (12 caracteres alfanuméricos)
- `videos_id` (FOREIGN KEY)
- `seasons_id` (FOREIGN KEY)
- `episodes_name`
- `file_source`
- `source_type`
- `file_url`
- `order`
- `date_added` (DATETIME)
- `last_ep_added` (DATETIME)

## Diferencias con la API de Dooplex

1. **Búsqueda dual**: Permite buscar videos tanto por IMDB ID (tt...) como por TMDB ID (numérico)
2. **Stream Key**: Genera automáticamente claves únicas de 12 caracteres
3. **Validaciones**: Incluye validaciones específicas para formatos de ID
4. **Base de datos**: Usa `docinesx_panel` en lugar de `docinesx_st`