# API REST - doCines Flixoo

Esta API REST permite consultar y registrar información sobre programas de TV, películas, temporadas y episodios.

## URL Base
http://api.docines.xyz/flixoo/api.php
## Endpoints Disponibles

### 1. Consultar Programa de TV por TMDB ID

**Método:** GET  
**Acción:** `get_tv_show`  
**Parámetros requeridos:** `tmdb_id`

**URL de ejemplo:**

http://api.docines.xyz/flixoo/api.php?action=get_tv_show&tmdb_id=123456

**Respuesta exitosa:**
```json
{
    "status": "success",
    "data": {
        "id": 1,
        "poster": "https://example.com/poster.jpg"
    }
}
```

---

### 2. Consultar Todas las Temporadas

**Método:** GET  
**Acción:** `get_seasons`  
**Parámetros:** Ninguno

**URL de ejemplo:**

http://api.docines.xyz/flixoo/api.php?action=get_seasons


**Respuesta exitosa:**
```json
{
    "status": "success",
    "data": [
        {
            "id": 1,
            "season_name": "Temporada 1"
        },
        {
            "id": 2,
            "season_name": "Temporada 2"
        }
    ]
}
```

---

### 3. Consultar Película por TMDB ID

**Método:** GET  
**Acción:** `get_movie`  
**Parámetros requeridos:** `tmdb_id`

**URL de ejemplo:**

http://api.docines.xyz/flixoo/api.php?action=get_movie&tmdb_id=789012


**Respuesta exitosa:**
```json
{
    "status": "success",
    "data": {
        "id": 5
    }
}
```

---

### 4. Contar Archivos de Película por Video ID

**Método:** GET  
**Acción:** `count_movie_files`  
**Parámetros requeridos:** `video_id`

**URL de ejemplo:**

http://api.docines.xyz/flixoo/api.php?action=count_movie_files&video_id=123


**Respuesta exitosa:**
```json
{
    "status": "success",
    "data": {
        "video_id": 123,
        "file_count": 3
    }
}
```

**Respuesta cuando no hay archivos:**
```json
{
    "status": "success",
    "data": {
        "video_id": 123,
        "file_count": 0
    }
}
```

---

### 5. Registrar Nuevo Episodio

**Método:** POST  
**Acción:** `add_episode`  
**Content-Type:** `application/x-www-form-urlencoded`

**Parámetros requeridos:**
- `season_id` (int): ID de la temporada
- `series_id` (int): ID de la serie
- `episode_name` (string): Nombre del episodio
- `slug` (string): URL amigable
- `description` (string): Descripción del episodio
- `source_type` (string): Tipo de fuente
- `file_url` (string): URL del archivo
- `order` (int): Orden del episodio
- `runtime` (int): Duración en minutos
- `poster` (string): URL de la imagen

**Ejemplo con cURL:**
```bash
curl -X POST http://api.docines.xyz/flixoo/api.php \
  -d "action=add_episode" \
  -d "season_id=1" \
  -d "series_id=1" \
  -d "episode_name=Episodio 1" \
  -d "slug=episodio-1" \
  -d "description=Descripción del episodio" \
  -d "source_type=streaming" \
  -d "file_url=https://example.com/video.mp4" \
  -d "order=1" \
  -d "runtime=45" \
  -d "poster=https://example.com/poster.jpg"
```

**Respuesta exitosa:**
```json
{
    "status": "success",
    "message": "Episodio registrado correctamente",
    "episode_id": 123
}
```

---

### 6. Registrar Archivo de Película

**Método:** POST  
**Acción:** `add_movie_file`  
**Content-Type:** `application/x-www-form-urlencoded`

**Parámetros requeridos:**
- `video_id` (int): ID del video
- `file_source` (string): Fuente del archivo
- `source_type` (string): Tipo de fuente
- `file_url` (string): URL del archivo
- `label` (string): Etiqueta del archivo
- `order` (int): Orden del archivo

**Parámetros opcionales:**
- `stream_key` (string): Clave de transmisión (se genera automáticamente si no se proporciona)

**Ejemplo con cURL:**
```bash
curl -X POST http://api.docines.xyz/flixoo/api.php \
  -d "action=add_movie_file" \
  -d "video_id=1" \
  -d "file_source=servidor1" \
  -d "source_type=mp4" \
  -d "file_url=https://example.com/movie.mp4" \
  -d "label=HD 1080p" \
  -d "order=1"
```

**Respuesta exitosa:**
```json
{
    "status": "success",
    "message": "Archivo de película registrado correctamente",
    "movie_file_id": 456,
    "stream_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
```

---

## Respuestas de Error

Todas las respuestas de error siguen el mismo formato:

```json
{
    "status": "error",
    "message": "Descripción del error"
}
```

### Códigos de Error Comunes

- **Parámetros faltantes:** "Falta el parámetro tmdb_id" o "Faltan campos requeridos: campo1, campo2"
- **No encontrado:** "No se encontró ningún programa de TV con ese tmdb_id"
- **Error de base de datos:** "Error en la consulta: [descripción del error]"
- **Método no permitido:** "Método no permitido o acción no reconocida"

---

## Ejemplos de Uso con JavaScript

### Consultar programa de TV:
```javascript
fetch('http://api.docines.xyz/flixoo/api.php?action=get_tv_show&tmdb_id=123456')
  .then(response => response.json())
  .then(data => console.log(data));
```

### Contar archivos de película:
```javascript
fetch('http://api.docines.xyz/flixoo/api.php?action=count_movie_files&video_id=123')
  .then(response => response.json())
  .then(data => {
    console.log(`La película tiene ${data.data.file_count} archivos`);
  });
```

### Registrar episodio:
```javascript
const formData = new FormData();
formData.append('action', 'add_episode');
formData.append('season_id', '1');
formData.append('series_id', '1');
formData.append('episode_name', 'Episodio 1');
// ... agregar más campos

fetch('http://api.docines.xyz/flixoo/api.php', {
  method: 'POST',
  body: formData
})
.then(response => response.json())
.then(data => console.log(data));
```

---

## Notas Importantes

1. Todas las respuestas están en formato JSON
2. Los campos `stream_key` se generan automáticamente como UUID si no se proporcionan
3. Las fechas `created_at` y `updated_at` se establecen automáticamente
4. Todos los parámetros se validan y sanitizan antes de ser procesados
5. La API soporta CORS para permitir solicitudes desde diferentes dominios
6. El conteo de archivos siempre devuelve un número entero, incluso si es 0 cuando no hay archivos