# Quick Start - Sistema de Descarga

## Integración Rápida (5 minutos)

### Paso 1: Verificar Archivos

Los siguientes archivos ya están creados en tu proyecto:

```
ios-app/Sources/
├── Services/
│   ├── DownloadManager.swift          ✅ 13KB
│   └── DOWNLOAD_SYSTEM_README.md      ✅ Documentación completa
├── Views/
│   ├── DownloadsView.swift            ✅ 13KB
│   └── MangaDetailView.swift          ✅ Actualizado
├── Extensions/
│   └── DownloadExtensions.swift       ✅ 4.7KB
├── Examples/
│   └── IntegrationExample.swift       ✅ Ejemplos de integración
└── Tests/
    └── DownloadManagerTests.swift     ✅ Tests unitarios
```

### Paso 2: Agregar DownloadsView a Tu App

Si tienes un TabView, simplemente agrega:

```swift
// En tu ContentView o App principal
TabView {
    ContentView()              // Tu vista actual
        .tabItem {
            Label("Biblioteca", systemImage: "books.vertical")
        }

    DownloadsView()            // ✅ NUEVA VISTA
        .tabItem {
            Label("Descargas", systemImage: "arrow.down.circle")
        }
        .badge(downloadManager.activeDownloads.count)  // Opcional: badge

    SettingsView()
        .tabItem {
            Label("Ajustes", systemImage: "gear")
        }
}
```

### Paso 3: Probar la Descarga

1. Abre `MangaDetailView` (ya está actualizado)
2. Toca el botón de descarga (icono de flecha hacia abajo) en la toolbar
3. Selecciona "Descargar últimos 10" o "Descargar todos"
4. Observa el progreso en cada fila de capítulo
5. Ve a la tab "Descargas" para ver el progreso detallado

¡Eso es todo! El sistema está completamente integrado.

## Características Incluidas

### ✅ Ya Funciona
- Descarga de capítulos individuales
- Descarga masiva (todos o últimos N)
- Progreso en tiempo real
- Cancelación de descargas
- Historial de descargas
- Notificaciones de estado
- Gestión de almacenamiento
- Manejo de errores

### 📱 UI Components
- `DownloadsView` - Vista completa con tabs
- `ActiveDownloadCard` - Card con progreso
- `CompletedDownloadCard` - Card de completados
- `FailedDownloadCard` - Card con reintentar
- Toast notifications
- Progress bars

### 🔧 Services
- `DownloadManager` - Singleton gerente de descargas
- `DownloadTask` - Modelo de tarea individual
- `DownloadState` - Estados de descarga
- `DownloadError` - Tipos de error

## Uso Básico

### Desde MangaDetailView

```swift
// Ya está implementado en MangaDetailView
// El usuario solo necesita tocar el botón de descarga
```

### Programáticamente

```swift
let downloadManager = DownloadManager.shared

// Descargar un capítulo
try await downloadManager.downloadChapter(
    mangaSlug: manga.slug,
    mangaTitle: manga.title,
    chapter: chapter
)

// Descargar múltiples
await downloadManager.downloadChapters(
    mangaSlug: manga.slug,
    mangaTitle: manga.title,
    chapters: chapters
)

// Cancelar descarga
downloadManager.cancelDownload(taskId: taskId)

// Cancelar todas
downloadManager.cancelAllDownloads()
```

### Verificar Descargas

```swift
let storage = StorageService.shared

// ¿Está descargado?
if storage.isChapterDownloaded(
    mangaSlug: manga.slug,
    chapterNumber: 1
) {
    // Usar imagen local
    let imageURL = storage.getImageURL(
        mangaSlug: manga.slug,
        chapterNumber: 1,
        pageIndex: 0
    )
}
```

## Personalización Opcional

### Ajustar Concurrencia

En `DownloadManager.swift`:

```swift
private let maxConcurrentDownloads = 3        // Capítulos simultáneos
private let maxConcurrentImagesPerChapter = 5 // Imágenes simultáneas
```

### Ajustar Calidad de Imagen

En `StorageService.swift`:

```swift
image.jpegData(compressionQuality: 0.8)  // 80% de calidad
```

En `DownloadExtensions.swift`:

```swift
let maxDimension: CGFloat = 2048  // Redimensionar si es mayor
return resized.compressedData(quality: 0.75)  // 75% de calidad
```

## Solución de Problemas

### Las descargas no inician
1. Verificar conexión a internet
2. Verificar que ManhwaWebScraper funciona
3. Verificar logs en consola

### El progreso no se actualiza
1. Asegurar que estás en @MainActor
2. Verificar que las propiedades son @Published
3. Verificar que observas DownloadManager

### Error "Already downloaded"
1. Es normal - el capítulo ya existe
2. Usa `storage.deleteDownloadedChapter()` para eliminar
3. O permite sobrescribir

### Las imágenes no se guardan
1. Verificar permisos de la app
2. Verificar espacio disponible
3. Verificar que directorios existen

## Próximos Pasos

### Opcional: Badge en TabView

```swift
struct MainTabView: View {
    @StateObject private var downloadManager = DownloadManager.shared

    var body: some View {
        TabView {
            // ...
            DownloadsView()
                .tabItem {
                    Label("Descargas", systemImage: "arrow.down.circle")
                }
                .badge(downloadManager.activeDownloads.count)  // ✅ Badge
        }
    }
}
```

### Opcional: Widget en Home

```swift
struct ContentView: View {
    @ObservedObject var downloadManager = DownloadManager.shared

    var body: some View {
        ScrollView {
            // Tu contenido actual

            if downloadManager.hasActiveDownloads {
                ActiveDownloadsWidget()
            }
        }
    }
}
```

### Opcional: Banner de Descargas

```swift
struct ContentView: View {
    var body: some View {
        MangaDetailView(manga: manga)
            .activeDownloadsBanner()  // ✅ Modificador personalizado
    }
}
```

## Testing

### Manual
1. Descargar un capítulo
2. Cancelar una descarga
3. Descargar múltiples capítulos
4. Probar sin internet
5. Limpiar almacenamiento

### Automatizado
Los tests están en `/Sources/Tests/DownloadManagerTests.swift`

Para ejecutar en Xcode:
1. Cmd + U
2. O Product → Test

## Archivos de Referencia

### Documentación
- `DOWNLOAD_SYSTEM_README.md` - Guía completa (400 líneas)
- `IMPLEMENTATION_SUMMARY.md` - Resumen ejecutivo
- `DIAGRAMS.md` - Diagramas de flujo
- `CHECKLIST.md` - Checklist de implementación

### Código
- `DownloadManager.swift` - Core del sistema
- `DownloadsView.swift` - Vista principal
- `DownloadExtensions.swift` - Extensiones útiles
- `IntegrationExample.swift` - Ejemplos de integración

## Soporte

### Problemas Comunes

**"No se compila"**
- Asegúrate de tener iOS 15+
- Verificar que todos los archivos están en el target
- Limpiar carpeta de builds (Cmd + Shift + K)

**"Las descargas fallan"**
- Verificar que ManhwaWebScraper funciona correctamente
- Probar con diferentes capítulos
- Verificar logs en consola

**"No se guardan las imágenes"**
- Verificar permisos en Info.plist
- Probar en dispositivo real (no simulador)
- Verificar espacio disponible

### Contacto

Para más ayuda, consulta:
1. `DOWNLOAD_SYSTEM_README.md` - Documentación completa
2. `DIAGRAMS.md` - Diagramas de flujo
3. `IntegrationExample.swift` - Ejemplos de código

---

**Tiempo de integración**: 5 minutos
**Dificultad**: Fácil
**Estado**: ✅ COMPLETO

¡Happy coding! 🚀
