import os
import urllib.request
from pathlib import Path
from bs4 import BeautifulSoup
from fpdf import FPDF

STORAGE_DIR = Path("/home/dayhanbiz/public_html/3-damja.science/storage")
FONT_PATH = STORAGE_DIR / "DejaVuSans.ttf"
# Используем 100% рабочую ссылку из репозитория разработчиков fpdf2
FONT_URL = "https://raw.githubusercontent.com/PyFPDF/fpdf2/master/test/fonts/DejaVuSans.ttf"

def download_font():
    if not FONT_PATH.exists():
        print("Скачивание шрифта DejaVuSans для поддержки кириллицы...")
        try:
            urllib.request.urlretrieve(FONT_URL, FONT_PATH)
            print("Шрифт успешно скачан!")
        except Exception as e:
            print(f"Ошибка скачивания шрифта: {e}")
            exit(1)

def convert_fb2_to_pdf(fb2_path: Path, pdf_path: Path):
    print(f"Читаем файл: {fb2_path.name}")
    with open(fb2_path, 'r', encoding='utf-8', errors='ignore') as f:
        soup = BeautifulSoup(f, 'xml')
        
    pdf = FPDF()
    pdf.add_page()
    pdf.add_font("DejaVu", style="", fname=str(FONT_PATH))
    pdf.set_font("DejaVu", size=12)
    
    # Поиск заголовка книги
    title_tag = soup.find('book-title')
    if title_tag and title_tag.text:
        pdf.set_font("DejaVu", size=16)
        pdf.multi_cell(0, 10, title_tag.text.strip(), align='C')
        pdf.ln(10)
        pdf.set_font("DejaVu", size=12)

    print("Генерация PDF (это может занять пару минут в зависимости от размера книги)...")
    # Извлечение всех параграфов
    for p in soup.find_all(['p', 'empty-line']):
        if p.name == 'empty-line':
            pdf.ln(5)
        else:
            text = p.get_text(strip=True)
            if text:
                pdf.multi_cell(0, 7, text)
                pdf.ln(2)
                
    pdf.output(str(pdf_path))
    print(f"Успешно сохранено в: {pdf_path.name}")

if __name__ == "__main__":
    download_font()
    
    # Ищем первый .fb2 файл для теста
    sample_fb2 = next(STORAGE_DIR.rglob("*.fb2"), None)
    if sample_fb2:
        output_pdf = sample_fb2.with_suffix(".pdf")
        convert_fb2_to_pdf(sample_fb2, output_pdf)
    else:
        print("Файлы .fb2 не найдены в директории storage.")
