from pathlib import Path
from PIL import Image
from reportlab.lib.colors import HexColor, white
from reportlab.lib.pagesizes import A3, landscape
from reportlab.graphics.barcode import qr
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from reportlab.graphics.shapes import Drawing
from reportlab.graphics import renderPDF

ROOT = Path('/home/sebas/work/tasks/T-bbx-print-20260520')
LOGO = ROOT / 'ballbox-logo-green-clean.png'
OUT = ROOT / 'ballbox-plot-a3-horizontal-black-bg-color-logo.pdf'
URL = 'https://ballbox.app'
BRAND = HexColor('#B7D334')
BLACK = HexColor('#0C0C0C')

page_w, page_h = landscape(A3)
c = canvas.Canvas(str(OUT), pagesize=(page_w, page_h))
margin = 42
safe_x = margin
safe_y = margin
safe_w = page_w - margin * 2
safe_h = page_h - margin * 2

c.setFillColor(BLACK)
c.rect(0, 0, page_w, page_h, stroke=0, fill=1)
c.setStrokeColor(BRAND)
c.setLineWidth(2)
c.roundRect(safe_x, safe_y, safe_w, safe_h, 18, stroke=1, fill=0)

logo = ImageReader(str(LOGO))
iw, ih = Image.open(LOGO).size
logo_max_w = safe_w * 0.50
logo_max_h = safe_h * 0.60
scale = min(logo_max_w / iw, logo_max_h / ih)
draw_w = iw * scale
draw_h = ih * scale
logo_x = safe_x + 48
logo_y = (page_h - draw_h) / 2 + 24
c.drawImage(logo, logo_x, logo_y, width=draw_w, height=draw_h, mask='auto')

qr_size = safe_h * 0.48
qr_x = safe_x + safe_w - qr_size - 70
qr_y = (page_h - qr_size) / 2 + 38
widget = qr.QrCodeWidget(URL)
bounds = widget.getBounds()
bw = bounds[2] - bounds[0]
bh = bounds[3] - bounds[1]
d = qr_size
drawing = Drawing(d, d, transform=[d / bw, 0, 0, d / bh, 0, 0])
drawing.add(widget)
pad = 18
c.setFillColor(white)
c.setStrokeColor(white)
c.setLineWidth(1.2)
c.roundRect(qr_x - pad, qr_y - pad, qr_size + 2*pad, qr_size + 2*pad, 14, stroke=1, fill=1)
renderPDF.draw(drawing, c, qr_x, qr_y)

line_y = page_h / 2
c.setStrokeColor(BRAND)
c.setLineWidth(4)
c.line(logo_x + draw_w + 24, line_y, qr_x - 36, line_y)

c.setFillColor(white)
c.setFont('Helvetica-Bold', 28)
c.drawCentredString(qr_x + qr_size / 2, qr_y - 46, 'Escaneá y entrá')
c.setFont('Helvetica', 18)
c.drawCentredString(qr_x + qr_size / 2, qr_y - 72, URL)

c.showPage()
c.save()
print(OUT)
