import base64, subprocess, os, shutil
fonts_css = open('/tmp/durrani_fonts/fonts2.css').read()
logo_b64 = base64.b64encode(open('/tmp/durrani_logo.png','rb').read()).decode()

# Menu-engineered order: premium signature lamb anchors top; crowd-pleaser next;
# fish/veg mid; light salad closes. sig=True -> subtle eye-magnet star.
dishes = [
 ("C1","Goscht Sabsi Korma","22,50 €", True,
  "Zartes Lammkeulenfleisch, behutsam geschmort mit Spinat, Schafskäse und Sahne, abgerundet mit Knoblauch und Peperoni. Cremig, kräftig und angenehm pikant. Serviert mit Reis und frischem Brot."),
 ("C2","Hähnchenbrust-Hacksteak vom Grill","17,90 €", False,
  "Saftiges Hähnchenbrust-Hacksteak vom Grill mit Champignons in einer feinen Safran-Kurkuma-Sahnesauce. Cremig und aromatisch nach afghanischer Art gewürzt. Serviert mit Reis und frischem Brot."),
 ("C3","Fasulya Keema Korma","16,90 €", False,
  "Zarte Brechbohnen, langsam geschmort mit Lauchzwiebeln, Kirschtomaten und Hähnchenbruststücken in einer würzigen Hackfleischsauce nach afghanischer Art. Serviert mit Reis und frischem Brot."),
 ("C4","Mahi Pangasiusfilet","18,90 €", False,
  "Zartes Pangasiusfilet vom Grill auf Spinat nach Art des Hauses, verfeinert mit Berberitzen. Fein gewürzt und schonend gegart. Serviert mit Kartoffeln und frischem Salat."),
 ("C5","Kadu Korma","17,50 €", False,
  "Gebratene Kürbisscheiben mit Lauchzwiebeln, Kirschtomaten und Knoblauch in einer feinen Kurkuma-Sahnesauce. Mild und cremig – ein vegetarischer Klassiker der afghanischen Küche. Serviert mit Reis und frischem Brot."),
 ("C6","Maigo Salat","15,00 €", False,
  "Gebratene Garnelen mit Knoblauch und frischen Kräutern auf knackigem, gemischtem Blattsalat. Leicht und frisch zubereitet. Serviert mit hausgemachtem Dip und frischem Brot."),
]

rows=""
for code,name,price,sig,desc in dishes:
    star = '<span class="star">&#9733;</span>' if sig else ''
    tag  = '<span class="sigtag">Chefempfehlung</span>' if sig else ''
    rows += f'''
    <div class="dish">
      <div class="dish-head">{star}<span class="code">{code}</span><span class="sep">&middot;</span><span class="name">{name}</span><span class="price">{price}</span>{tag}</div>
      <div class="desc">{desc}</div>
    </div>'''

html = f'''<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><style>
{fonts_css}
@page {{ size:A4 portrait; margin:0; }}
*{{ box-sizing:border-box; }}
html,body{{ margin:0; padding:0; }}
body{{ background:#EDE7DC; color:#171310;
  font-family:'Fraunces',serif; font-optical-sizing:auto;
  width:210mm; height:297mm; padding:14mm 16mm 12mm; }}
.top{{ display:flex; justify-content:space-between; align-items:center; }}
.menue{{ font-family:'Great Vibes',cursive; font-size:62pt; color:#5E4A33; line-height:0.85; }}
.logo{{ height:26mm; }}
.heading{{ text-align:center; font-family:'Fraunces',serif; font-weight:600; font-size:23pt;
  color:#5E4A33; letter-spacing:3px; text-transform:uppercase; margin:3mm 0 8mm; line-height:1.18; }}
.dish{{ margin-bottom:6mm; }}
.dish-head{{ font-size:0; }}                       /* kill inline-gaps; children re-set size */
.star{{ font-size:13pt; color:#B8892A; margin-right:5px; vertical-align:1px; }}
.code{{ font-family:'Fraunces',serif; font-weight:700; font-size:15.5pt; color:#171310; }}
.sep{{ font-size:15.5pt; color:#B8892A; margin:0 8px; font-weight:600; }}
.name{{ font-family:'Fraunces',serif; font-weight:700; font-size:15.5pt; color:#171310; letter-spacing:0.2px; }}
.price{{ font-family:'Fraunces',serif; font-weight:500; font-size:12pt; color:#6A6157; margin-left:12px; white-space:nowrap; }}
.sigtag{{ font-family:'Fraunces',serif; font-style:italic; font-weight:500; font-size:9.5pt; color:#B8892A;
  letter-spacing:0.4px; margin-left:12px; }}
.desc{{ font-family:'Fraunces',serif; font-weight:400; font-size:11pt; line-height:1.5; color:#544C42;
  margin-top:1.6mm; max-width:176mm; }}
.footer{{ position:absolute; left:16mm; right:16mm; bottom:12mm; }}
.rule{{ height:1px; background:#CFC3AF; margin:0 0 4.5mm; }}
.f-title{{ font-family:'Fraunces',serif; font-weight:600; font-size:13pt; color:#171310; letter-spacing:0.3px; margin-bottom:2mm; }}
.f-text{{ font-family:'Fraunces',serif; font-weight:400; font-size:10pt; line-height:1.5; color:#544C42; max-width:178mm; }}
.f-cta{{ font-family:'Fraunces',serif; font-weight:600; font-size:10.5pt; color:#5E4A33; margin-top:2.5mm; letter-spacing:0.2px; }}
</style></head><body>
  <div class="top">
    <div class="menue">Men&uuml;</div>
    <img class="logo" src="data:image/png;base64,{logo_b64}">
  </div>
  <div class="heading">Unsere Empfehlung des Hauses</div>
  <div class="list">{rows}</div>
  <div class="footer">
    <div class="rule"></div>
    <div class="f-title">Reservieren Sie Ihren Tisch &ndash; wir freuen uns auf Sie</div>
    <div class="f-text">Ob Familienfest, Gesch&auml;ftsessen oder ein Abend zu zweit: Sichern Sie sich Ihren Platz und genie&szlig;en Sie echte afghanische Gastfreundschaft. Feiern und Catering richten wir ganz nach Ihren W&uuml;nschen aus &ndash; im Restaurant oder bei Ihnen vor Ort.</div>
    <div class="f-cta">Jetzt reservieren &amp; Catering anfragen &nbsp;&nbsp;&#9742;&nbsp; 06051 7897544 &nbsp;&middot;&nbsp; www.restaurant-durrani.de</div>
  </div>
</body></html>'''
open('/tmp/durrani_menu2.html','w').write(html)
from weasyprint import HTML
HTML(string=html, base_url='/tmp').write_pdf('/tmp/Durrani-Speisekarte.pdf')
if shutil.which('pdftoppm'):
    subprocess.run(['pdftoppm','-png','-r','150','-singlefile','/tmp/Durrani-Speisekarte.pdf','/tmp/Durrani-Speisekarte'],check=True)
# detect page count to catch overflow
import re
pages=subprocess.run(['pdfinfo','/tmp/Durrani-Speisekarte.pdf'],capture_output=True,text=True).stdout
m=re.search(r'Pages:\s+(\d+)',pages); print("PAGES:", m.group(1) if m else "?")
