#!/usr/bin/env python3
"""
Genera il PDF del libro da colorare "Animali Marini" per Amazon KDP.
Formato: 8.5 x 11 pollici (612 x 792 pt a 72 dpi base, ma useremo punti direttamente).
300 DPI -> immagini scalate correttamente.
"""

import os
from reportlab.lib.pagesizes import letter  # 8.5 x 11 pollici (612 x 792 pt)
from reportlab.lib.units import inch, mm
from reportlab.lib.colors import HexColor, white, black
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from PIL import Image
import textwrap

# --- CONFIG ---
OUTPUT_DIR = "/home/node/.openclaw/workspace/books/animali-marini"
IMAGES_DIR = os.path.join(OUTPUT_DIR, "images")
OUTPUT_PDF = os.path.join(OUTPUT_DIR, "animali-marini.pdf")
PAGE_W, PAGE_H = letter  # 612 x 792 pt

# Colori tema mare
OCEAN_BLUE = HexColor("#1a6b8a")
OCEAN_LIGHT = HexColor("#d4f1f9")
OCEAN_MEDIUM = HexColor("#7ec8e3")
SAND = HexColor("#f5deb3")
CORAL = HexColor("#ff7f50")
DARK_BLUE = HexColor("#0a2e3c")

# Nomi animali in ordine
ANIMAL_NAMES = [
    "Delfino",
    "Balena",
    "Tartaruga",
    "Cavalluccio Marino",
    "Stella Marina",
    "Pesce Pagliaccio",
    "Polpo",
    "Squalo",
    "Granchio",
    "Medusa",
    "Pesce Palla",
    "Sirenetta",
    "Pinguino",
    "Lumaca di Mare",
    "Gamberetto",
    "Manta",
    "Pesce Spada",
    "Tricheco",
    "Foca",
    "Pesce Tropicale",
]


def add_page_border(c, color=OCEAN_BLUE, width=6):
    """Aggiunge un bordo decorativo alla pagina."""
    c.setStrokeColor(color)
    c.setLineWidth(width)
    c.rect(width / 2, width / 2, PAGE_W - width, PAGE_H - width, stroke=1, fill=0)
    # Inner thin border
    c.setStrokeColor(OCEAN_MEDIUM)
    c.setLineWidth(1.5)
    margin = width + 8
    c.rect(margin, margin, PAGE_W - 2 * margin, PAGE_H - 2 * margin, stroke=1, fill=0)


def add_footer(c, page_num, total=24):
    """Aggiunge numero di pagina piccolo in basso."""
    c.setFillColor(HexColor("#999999"))
    c.setFont("Helvetica", 8)
    c.drawCentredString(PAGE_W / 2, 18, f"{page_num} / {total}")


def draw_centered_text(c, text, y, font="Helvetica", size=16, color=black, max_width=450):
    """Disegna testo centrato con wrap."""
    c.setFillColor(color)
    c.setFont(font, size)
    lines = textwrap.wrap(text, width=int(max_width / (size * 0.5)))
    for line in lines:
        c.drawCentredString(PAGE_W / 2, y, line)
        y -= size * 1.4
    return y


def draw_multiline_text(c, text, x, y, font="Helvetica", size=14, color=black, max_width=500, align="left"):
    """Disegna testo multi-riga con wrap."""
    c.setFillColor(color)
    c.setFont(font, size)
    lines = textwrap.wrap(text, width=int(max_width / (size * 0.5)))
    for line in lines:
        if align == "center":
            c.drawCentredString(x, y, line)
        elif align == "right":
            c.drawRightString(x, y, line)
        else:
            c.drawString(x, y, line)
        y -= size * 1.5
    return y


def draw_image_centered(c, img_path, max_w, max_h, y_offset=0):
    """Disegna un'immagine centrata nella pagina, scalata per rientrare in max_w x max_h."""
    try:
        pil_img = Image.open(img_path)
        iw, ih = pil_img.size
    except Exception as e:
        print(f"  Errore apertura {img_path}: {e}")
        return
    
    # Scala per adattarsi a max_w x max_h mantenendo proporzioni
    scale = min(max_w / iw, max_h / ih)
    dw, dh = iw * scale, ih * scale
    x = (PAGE_W - dw) / 2
    y = (PAGE_H - dh) / 2 + y_offset
    
    try:
        c.drawImage(img_path, x, y, width=dw, height=dh, preserveAspectRatio=True)
    except Exception as e:
        print(f"  Errore disegno {img_path}: {e}")


def create_cover(c):
    """Pagina 1: Copertina."""
    add_page_border(c, DARK_BLUE, 10)
    
    # Background decorativo superiore
    c.setFillColor(OCEAN_LIGHT)
    c.setStrokeColor(OCEAN_MEDIUM)
    c.setLineWidth(2)
    # Onde decorative in alto
    for i in range(0, int(PAGE_W), 40):
        x = i
        y_base = PAGE_H - 140
        c.setFillColor(OCEAN_LIGHT if (i // 40) % 2 == 0 else HexColor("#b8e6f0"))
        c.ellipse(x - 20, y_base - 15, x + 40, y_base + 15, stroke=0, fill=1)
    
    # Onde decorative in basso
    for i in range(0, int(PAGE_W), 35):
        x = i
        y_base = 130
        c.setFillColor(OCEAN_LIGHT if (i // 35) % 2 == 0 else HexColor("#b8e6f0"))
        c.ellipse(x - 18, y_base - 12, x + 35, y_base + 12, stroke=0, fill=1)
    
    # Titolo principale
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica-Bold", 36)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 240, "Animali Marini")
    
    c.setFillColor(OCEAN_BLUE)
    c.setFont("Helvetica-Oblique", 18)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 280, "Libro da Colorare per Bambini")
    
    # Sottotitolo
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica", 13)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 310, "20 Creature Fantastiche dell'Oceano")
    c.drawCentredString(PAGE_W / 2, PAGE_H - 330, "da Colorare e Scoprire")
    
    # Immagine decorativa centrale (delfino)
    img_path = os.path.join(IMAGES_DIR, "01-delfino.png")
    draw_image_centered(c, img_path, 280, 240, y_offset=-20)
    
    # "Per bambini 4-8 anni" badge
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica-Bold", 14)
    badge_y = 160
    c.setFillColor(OCEAN_MEDIUM)
    c.roundRect(PAGE_W / 2 - 100, badge_y - 5, 200, 30, 15, stroke=0, fill=1)
    c.setFillColor(white)
    c.drawCentredString(PAGE_W / 2, badge_y + 8, "Per bambini 4-8 anni  🐬🐙🐠")
    
    # Formato in basso
    c.setFillColor(HexColor("#666666"))
    c.setFont("Helvetica", 9)
    c.drawCentredString(PAGE_W / 2, 60, "Formato 8.5\" x 11\" — 20 pagine da colorare")


def create_dedication_page(c):
    """Pagina 2: Dedica."""
    add_page_border(c)
    add_footer(c, 2)
    
    c.setFillColor(OCEAN_BLUE)
    c.setFont("Helvetica-Bold", 22)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 150, "Questo libro appartiene a:")
    
    # Linea per scrivere il nome
    c.setStrokeColor(OCEAN_MEDIUM)
    c.setLineWidth(2)
    c.line(150, PAGE_H - 200, PAGE_W - 150, PAGE_H - 200)
    
    # Decorazione (piccola stella marina)
    star_path = os.path.join(IMAGES_DIR, "05-stella-marina.png")
    try:
        draw_image_centered(c, star_path, 100, 100, y_offset=-10)
    except:
        pass
    
    # Filastrocca
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica-Oblique", 14)
    y = PAGE_H - 380
    c.drawCentredString(PAGE_W / 2, y, "Immagina di tuffarti nell'oceano più blu che ci sia...")
    y -= 30
    c.drawCentredString(PAGE_W / 2, y, "Ogni pagina è un nuovo amico che aspetta solo te")
    y -= 30
    c.drawCentredString(PAGE_W / 2, y, "per prendere vita con i tuoi colori preferiti!")
    
    # Decorazione onde
    c.setFillColor(OCEAN_LIGHT)
    for i, x in enumerate(range(50, int(PAGE_W) - 50, 45)):
        yy = 120 + (10 if i % 2 == 0 else 0)
        c.ellipse(x - 15, yy - 8, x + 30, yy + 8, stroke=0, fill=1)


def create_intro_page(c):
    """Pagina 3: Introduzione per genitori."""
    add_page_border(c)
    add_footer(c, 3)
    
    c.setFillColor(OCEAN_BLUE)
    c.setFont("Helvetica-Bold", 20)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 120, "Caro genitore,")
    
    intro_text = (
        "questo libro da colorare è molto più di un semplice passatempo. "
        "Ogni pagina è un'opportunità per il vostro bambino di sviluppare la creatività, "
        "migliorare la concentrazione e allenare la motricità fine, il tutto divertendosi "
        "lontano dagli schermi. Le linee spesse e i disegni semplici sono studiati per dare "
        "fiducia ai piccoli artisti, permettendo loro di completare ogni illustrazione con orgoglio. "
        "Create un momento speciale insieme: colorare fianco a fianco è un gesto d'amore "
        "che rimarrà nel cuore. Buon divertimento!"
    )
    
    draw_multiline_text(c, intro_text, 80, PAGE_H - 170, "Helvetica", 14, DARK_BLUE, 450)
    
    # Firma
    c.setFont("Helvetica-Oblique", 13)
    c.setFillColor(OCEAN_BLUE)
    c.drawCentredString(PAGE_W / 2, 180, "— Il Team di Animali Marini")
    
    # Decorazione
    c.setFillColor(OCEAN_LIGHT)
    c.setStrokeColor(OCEAN_MEDIUM)
    for i in range(3):
        x = 100 + i * 200
        c.circle(x, 90, 20, stroke=1, fill=1)


def create_illustration_page(c, img_num, page_num):
    """Pagine 4-23: Illustrazioni."""
    animal_name = ANIMAL_NAMES[img_num - 1]
    img_path = os.path.join(IMAGES_DIR, f"{img_num:02d}-{animal_name.lower().replace(' ', '-').replace('ì', 'i').replace('à', 'a').replace('ù', 'u')}.png")
    
    # Verifica alternative di filename per caratteri speciali
    if not os.path.exists(img_path):
        # Prova il nome senza modifiche
        alt_name = animal_name.lower().replace(' ', '-')
        img_path = os.path.join(IMAGES_DIR, f"{img_num:02d}-{alt_name}.png")
    
    if not os.path.exists(img_path):
        print(f"  WARNING: Immagine non trovata: {img_path}")
        # Cerca qualsiasi file che inizia col numero
        import glob
        matches = glob.glob(os.path.join(IMAGES_DIR, f"{img_num:02d}-*.png"))
        if matches:
            img_path = matches[0]
            print(f"  Usando alternativa: {img_path}")
    
    add_page_border(c)
    add_footer(c, page_num)
    
    # Nome dell'animale in alto
    c.setFillColor(OCEAN_BLUE)
    c.setFont("Helvetica-Bold", 20)
    c.drawCentredString(PAGE_W / 2, PAGE_H - 70, f"🐚 {animal_name}")
    
    # Immagine centrata
    if os.path.exists(img_path):
        draw_image_centered(c, img_path, 500, 540, y_offset=-20)
    else:
        # Placeholder se immagine mancante
        c.setStrokeColor(HexColor("#cccccc"))
        c.setLineWidth(2)
        c.setFillColor(HexColor("#f9f9f9"))
        c.rect(PAGE_W/2 - 150, PAGE_H/2 - 150, 300, 300, stroke=1, fill=1)
        c.setFillColor(HexColor("#aaaaaa"))
        c.setFont("Helvetica", 16)
        c.drawCentredString(PAGE_W/2, PAGE_H/2, f"🐠 {animal_name}")
    
    # Numeri delle pagine in basso
    c.setFillColor(HexColor("#aaaaaa"))
    c.setFont("Helvetica", 9)
    c.drawCentredString(PAGE_W / 2, 45, f"Illustrazione {img_num} di 20")


def create_cta_page(c):
    """Pagina 24 (ultima): Call to action recensione."""
    add_page_border(c)
    add_footer(c, 24)
    
    # Titolo
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica-Bold", 24)
    y = PAGE_H - 120
    c.drawCentredString(PAGE_W / 2, y, "Complimenti, piccolo artista!")
    y -= 50
    c.setFont("Helvetica", 16)
    c.drawCentredString(PAGE_W / 2, y, "🎉")
    y -= 50
    
    c.setFont("Helvetica", 16)
    c.setFillColor(OCEAN_BLUE)
    c.drawCentredString(PAGE_W / 2, y, "Hai colorato tutte le 20 creature marine!")
    y -= 35
    c.drawCentredString(PAGE_W / 2, y, "Il tuo libro è ora pieno di colori e di magia.")
    y -= 60
    
    c.setFont("Helvetica-Oblique", 14)
    c.setFillColor(DARK_BLUE)
    c.drawCentredString(PAGE_W / 2, y, "Speriamo che tu ti sia divertito tanto quanto noi")
    y -= 25
    c.drawCentredString(PAGE_W / 2, y, "ci siamo divertiti a crearlo per te.")
    y -= 60
    
    # Separatore decorativo
    c.setStrokeColor(OCEAN_MEDIUM)
    c.setLineWidth(2)
    c.line(150, y, PAGE_W - 150, y)
    y -= 40
    
    c.setFillColor(DARK_BLUE)
    c.setFont("Helvetica-Bold", 18)
    c.drawCentredString(PAGE_W / 2, y, "Aiutaci a migliorare!")
    y -= 45
    
    c.setFont("Helvetica", 13)
    c.setFillColor(DARK_BLUE)
    c.drawCentredString(PAGE_W / 2, y, "Se questo libro ti è piaciuto, ti chiediamo un piccolo favore.")
    y -= 25
    c.drawCentredString(PAGE_W / 2, y, "Lasciaci una recensione su Amazon!")
    y -= 25
    c.drawCentredString(PAGE_W / 2, y, "Le tue parole aiutano altri genitori come te")
    y -= 25
    c.drawCentredString(PAGE_W / 2, y, "a scegliere il libro perfetto per i loro bambini.")
    y -= 40
    
    c.setStrokeColor(OCEAN_MEDIUM)
    c.setLineWidth(2)
    c.line(150, y, PAGE_W - 150, y)
    y -= 35
    
    c.setFont("Helvetica", 12)
    c.setFillColor(HexColor("#666666"))
    c.drawCentredString(PAGE_W / 2, y, "Basta un attimo: vai sulla pagina Amazon del libro")
    y -= 20
    c.drawCentredString(PAGE_W / 2, y, 'e clicca su "Scrivi una recensione".')
    y -= 35
    c.setFillColor(OCEAN_BLUE)
    c.setFont("Helvetica-Bold", 14)
    c.drawCentredString(PAGE_W / 2, y, "Grazie di cuore! 💙")
    
    # Decorazioni
    c.setFillColor(OCEAN_LIGHT)
    for i, x in enumerate(range(60, int(PAGE_W) - 60, 50)):
        yy = 60 + (8 if i % 2 == 0 else 0)
        c.circle(x, yy, 12, stroke=0, fill=1)


def main():
    print("Generazione PDF in corso...")
    
    # Verifica immagini
    for i in range(1, 21):
        base = os.path.join(IMAGES_DIR, f"{i:02d}")
        matches = [f for f in os.listdir(IMAGES_DIR) if f.startswith(f"{i:02d}-") and f.endswith(".png")]
        if matches:
            print(f"  ✓ {i:02d} - {matches[0]}")
        else:
            print(f"  ✗ {i:02d} - NON TROVATO")
    
    # Crea il PDF
    c = canvas.Canvas(OUTPUT_PDF, pagesize=letter)
    c.setTitle("Animali Marini - Libro da Colorare per Bambini")
    c.setAuthor("Team Animali Marini")
    c.setSubject("Libro da Colorare per Bambini 4-8 anni")
    
    total_pages = 24  # 1 cover + 1 dedica + 1 intro + 20 illustrazioni + 1 CTA
    
    print("\n--- Creazione pagine ---")
    
    # 1. Copertina (pagina 1)
    print("  1/24 - Copertina")
    create_cover(c)
    c.showPage()
    
    # 2. Dedica (pagina 2)
    print("  2/24 - Dedica")
    create_dedication_page(c)
    c.showPage()
    
    # 3. Introduzione (pagina 3)
    print("  3/24 - Introduzione genitori")
    create_intro_page(c)
    c.showPage()
    
    # 4-23. Illustrazioni (pagine 4-23)
    for i in range(1, 21):
        page_num = i + 3
        print(f"  {page_num}/24 - {ANIMAL_NAMES[i-1]}")
        create_illustration_page(c, i, page_num)
        c.showPage()
    
    # 24. CTA finale (pagina 24)
    print(f"  24/24 - Call to action recensione")
    create_cta_page(c)
    c.showPage()
    
    # Salva
    c.save()
    
    file_size = os.path.getsize(OUTPUT_PDF)
    print(f"\n✅ PDF generato con successo!")
    print(f"   📄 {OUTPUT_PDF}")
    print(f"   📏 {(file_size / 1024 / 1024):.1f} MB")
    print(f"   📄 {total_pages} pagine")


if __name__ == "__main__":
    main()
