# API REST para Web Series - Docines

Esta API REST permite obtener información de web series, temporadas, episodios, contar links de episodios y registrar nuevos links.

## Estructura del Proyecto

```
docines/
├── 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_do
- **Usuario:** docinesx_anibal
- **Contraseña:** anibal5083038xS

## Endpoints Disponibles

### 1. Obtener Web Serie por TMDB ID

**URL:** `https://api.docines.xyz/docines/api.php?action=get_web_series&TMDB_ID=VALOR`

**Método:** GET

**Parámetros:**
- `TMDB_ID` (requerido): ID de TMDB de la web serie

**Ejemplo:**
```
https://api.docines.xyz/docines/api.php?action=get_web_series&TMDB_ID=12345
```

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

**Respuesta sin resultados:**
```json
{
  "success": false,
  "message": "Web serie no encontrada"
}
```

### 2. Obtener Temporadas por Web Series ID

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

**Método:** GET

**Parámetros:**
- `web_series_id` (requerido): ID de la web serie

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

**Respuesta:**
```json
{
  "success": true,
  "data": [
    {
      "id": "1",
      "Session_Name": "Temporada 1",
      "season_order": "1"
    },
    {
      "id": "2",
      "Session_Name": "Temporada 2",
      "season_order": "2"
    }
  ]
}
```

### 3. Obtener Episodios por Season ID

**URL:** `https://api.docines.xyz/docines/api.php?action=get_episodes&season_id=VALOR`

**Método:** GET

**Parámetros:**
- `season_id` (requerido): ID de la temporada

**Ejemplo:**
```
https://api.docines.xyz/docines/api.php?action=get_episodes&season_id=1
```

**Respuesta:**
```json
{
  "success": true,
  "data": [
    {
      "episoade_order": "1",
      "id": "1"
    },
    {
      "episoade_order": "2",
      "id": "2"
    }
  ]
}
```

### 4. Contar Links de Episodio

**URL:** `https://api.docines.xyz/docines/api.php?action=count_episode_links&episode_id=VALOR`

**Método:** GET

**Parámetros:**
- `episode_id` (requerido): ID del episodio

**Ejemplo:**
```
https://api.docines.xyz/docines/api.php?action=count_episode_links&episode_id=1
```

**Respuesta:**
```json
{
  "success": true,
  "data": {
    "count": 3
  }
}
```

**Respuesta sin links:**
```json
{
  "success": true,
  "data": {
    "count": 0
  }
}
```

### 5. Registrar Link de Episodio

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

**Método:** POST

**Content-Type:** application/json

**Parámetros del cuerpo (JSON):**
- `name` (requerido): Nombre del link
- `link_order` (requerido): Orden del link
- `episode_id` (requerido): ID del episodio
- `url` (requerido): URL del link
- `type` (requerido): Tipo de link

**Valores automáticos:**
- `status`: 1 (predeterminado)
- `link_type`: 0 (predeterminado)

**Ejemplo de petición:**
```json
{
  "name": "StreamTape HD",
  "link_order": 1,
  "episode_id": "1",
  "url": "https://streamtape.com/v/abc123",
  "type": "streamtape"
}
```

**Respuesta exitosa:**
```json
{
  "success": true,
  "message": "Link de episodio agregado correctamente",
  "id": "123"
}
```

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

## Códigos de Estado HTTP

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

## 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 web serie por TMDB ID
https://api.docines.xyz/docines/api.php?action=get_web_series&TMDB_ID=94997

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

# Obtener episodios
https://api.docines.xyz/docines/api.php?action=get_episodes&season_id=1

# Contar links de episodio
https://api.docines.xyz/docines/api.php?action=count_episode_links&episode_id=1
```

### Para endpoint POST (add_episode_link):
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/docines/api.php?action=add_episode_link \
  -H "Content-Type: application/json" \
  -d '{
    "name": "StreamTape HD",
    "link_order": 1,
    "episode_id": "1",
    "url": "https://streamtape.com/v/abc123",
    "type": "streamtape"
  }'
```

## Estructura de Base de Datos Esperada

### Tabla `web_series`
- `id` (PRIMARY KEY)
- `TMDB_ID`

### Tabla `web_series_seasons`
- `id` (PRIMARY KEY)
- `web_series_id` (FOREIGN KEY)
- `Session_Name`
- `season_order`

### Tabla `web_series_episoade`
- `id` (PRIMARY KEY)
- `season_id` (FOREIGN KEY)
- `episoade_order`

### Tabla `episode_play_links`
- `id` (PRIMARY KEY)
- `name`
- `link_order`
- `episode_id` (FOREIGN KEY)
- `url`
- `type`
- `status`
- `link_type`

## Características Especiales

1. **Conteo automático**: El endpoint `count_episode_links` siempre retorna un número, incluso si es 0
2. **Ordenamiento**: Las temporadas se ordenan por `season_order` y los episodios por `episoade_order`
3. **Valores predeterminados**: `status` = 1 y `link_type` = 0 se establecen automáticamente
4. **Validación completa**: Todos los campos requeridos son validados antes de insertar

## Flujo de Trabajo Típico

1. **Buscar serie**: Usar `get_web_series` con TMDB_ID para obtener el ID interno
2. **Obtener temporadas**: Usar `get_seasons` con el web_series_id obtenido
3. **Obtener episodios**: Usar `get_episodes` con el season_id de la temporada deseada
4. **Verificar links existentes**: Usar `count_episode_links` para saber cuántos links ya tiene un episodio
5. **Agregar nuevo link**: Usar `add_episode_link` para registrar un nuevo link de reproducción

## Diferencias con otras APIs del proyecto

- **Base de datos**: Usa `docinesx_do` (diferente a dooplex y plusmovie)
- **Estructura de tablas**: Maneja web series con nomenclatura específica (`episoade` en lugar de `episode`)
- **Funcionalidad de conteo**: Incluye endpoint específico para contar links existentes
- **Campos únicos**: Maneja `Session_Name`, `episoade_order`, `link_order`, etc.