# Parse EPUB to Markdown

Fuente conceptual: OpenViking `openviking/parse/parsers/epub.py` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Funcion a implementar

### epub_to_markdown

- **Dominio:** core
- **Lang:** Python
- **Purity:** impure (I/O: lee archivo)
- **Signature:** `epub_to_markdown(epub_path: str) -> str`
- **Descripcion:** Convierte un ebook EPUB a markdown. Intenta ebooklib primero, fallback a extraccion manual con zipfile.
- **Algoritmo con ebooklib:**
  1. Leer con `epub.read_epub(path)`
  2. Extraer metadata: titulo, autor
  3. Generar header: `# {titulo}` + `**Author:** {autor}`
  4. Para cada ITEM_DOCUMENT: decodificar contenido HTML → convertir a markdown
  5. Unir con `\n\n`
- **Algoritmo fallback manual (sin ebooklib):**
  1. Abrir como ZIP
  2. Listar archivos .html/.xhtml/.htm
  3. Para cada uno: decodificar HTML → convertir a markdown basico
- **Conversion HTML basica a markdown:**
  1. Remover `<script>` y `<style>` tags
  2. `<h1>` → `# ...`, `<h2>` → `## ...`, etc.
  3. `<strong>`/`<b>` → `**...**`, `<em>`/`<i>` → `*...*`
  4. `<p>` → contenido + `\n\n`
  5. `<br>` → `\n`
  6. Remover tags HTML restantes
  7. Unescape HTML entities (`&amp;` → `&`)
  8. Normalizar whitespace
- **Deps:** `ebooklib` (opcional), `zipfile` (stdlib)
- **Error type:** Exception
- **Tests:** epub con ebooklib, epub sin ebooklib (manual), epub con metadata, epub corrupto
