from flask import Flask, send_file, render_template, request
from playwright.async_api import async_playwright
import asyncio
import os

app = Flask(__name__)

@app.route('/IMG')
def index():
    return render_template('index-IMG.html')

@app.route('/3d')
def view_3d():
    return render_template('3d.html')

@app.route('/GL')
def grosslux():
    return render_template('index-gl.html')

@app.route('/IMGpreview')
def img_preview():
    return render_template('img2.html')

@app.route('/GLpreview')
def gl_preview():
    return render_template('gl2.html')

@app.route('/generate_pdf', methods=['POST'])
def generate_pdf():
    page_url = request.form.get('url')
    filename = request.form.get('filename', 'document')  # получить имя файла

    if not page_url:
        return "URL is required", 400

    safe_filename = "".join(c for c in filename if c.isalnum() or c in (' ', '_', '-')).rstrip()
    output_path = f"{safe_filename}.pdf"
    
    asyncio.run(create_pdf(page_url, output_path))
    return send_file(
        output_path,
        as_attachment=True,
        download_name="generated.pdf",
        mimetype='application/pdf'
    )

async def create_pdf(page_url, output_path):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto(page_url, wait_until="networkidle")
        await page.screenshot(path="debug.png")
        await page.pdf(path=output_path, landscape=True, format="A4", print_background=True)
        await browser.close()

@app.route('/generate_gl_pdf', methods=['POST'])
def generate_gl_pdf():
    page_url = request.form.get('url')
    filename = request.form.get('filename', 'document')  # получить имя файла

    if not page_url:
        return "URL is required", 400

    safe_filename = "".join(c for c in filename if c.isalnum() or c in (' ', '_', '-')).rstrip()
    output_path = f"{safe_filename}.pdf"
    
    asyncio.run(create_gl_pdf(page_url, output_path))
    return send_file(
        output_path,
        as_attachment=True,
        download_name="generated_gl.pdf",
        mimetype='application/pdf'
    )

async def create_gl_pdf(page_url, output_path):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto(page_url, wait_until="networkidle")
        await page.screenshot(path="debug.png")
        await page.pdf(
            path=output_path, 
            landscape=True, 
            format="A3", 
            print_background=True
        )
        await browser.close()

if __name__ == '__main__':
    if os.path.exists('output.pdf'):
        os.remove('output.pdf')
    app.run(host='0.0.0.0', port=5000, debug=True)
