import base64, subprocess, os, shutil

fonts_css = open('/tmp/durrani_fonts/fonts.css').read()
logo_b64 = base64.b64encode(open('/tmp/durrani_logo.png','rb').read()).decode()

dishes = [
 ("C1","Fasulya Keema Korma","16,90 €",
  "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."),
 ("C2","Goscht Sabsi Korma","22,50 €",
  "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."),
 ("C3","Kadu Korma","17,50 €",
  "Gebratene Kürbisscheiben mit Lauchzwiebeln, Kirschtomaten und Knoblauch in einer feinen Kurkuma-Sahnesauce. Mild und cremig – ein Klassiker der afghanischen Küche. Serviert mit Reis und frischem Brot."),
 ("C4","Maigo Salat","15,00 €",
  "Gebratene Garnelen mit Knoblauch und frischen Kräutern auf knackigem, gemischtem Blattsalat. Leicht und frisch zubereitet. Serviert mit hausgemachtem Dip und frischem Brot."),
 ("C5","Mahi Pangasiusfilet","18,90 €",
  "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."),
 ("C6","Hähnchenbrust-Hacksteak vom Grill","17,90 €",
  "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."),
]

rows = ""
for code,name,price,desc in dishes:
    rows += f'''
    <div class="dish">
      <div class="dish-head">
        <span class="dish-name"><span class="code">{code}</span><span class="sep">|</span>{name}</span>
        <span class="price">{price}</span>
      </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; -weasy-hyphens: none; }}
html,body {{ margin:0; padding:0; }}
body {{
  background:#EDE7DC; color:#1A1611;
  font-family:'Mulish',sans-serif;
  width:210mm; height:297mm;
  padding:15mm 16mm 13mm 16mm;
}}
.top {{ display:flex; justify-content:space-between; align-items:center; margin-bottom:2mm; }}
.menue {{ font-family:'Great Vibes',cursive; font-size:60pt; color:#5E4A33; line-height:0.9; }}
.logo {{ height:24mm; }}
.heading {{ text-align:center; font-family:'Cormorant Garamond',serif; font-weight:600;
  color:#5E4A33; letter-spacing:5px; font-size:21pt; line-height:1.18; text-transform:uppercase; margin:1mm 0 7mm; }}
.list {{ }}
.dish {{ margin-bottom:6.6mm; }}
.dish-head {{ display:flex; justify-content:space-between; align-items:baseline; }}
.dish-name {{ font-family:'Mulish',sans-serif; font-weight:800; font-size:12.5pt; color:#1A1611; letter-spacing:0.2px; }}
.code {{ font-weight:800; }}
.sep {{ color:#9A8E7A; margin:0 7px; font-weight:500; }}
.price {{ font-family:'Mulish',sans-serif; font-weight:300; font-size:11pt; color:#2A2620; white-space:nowrap; padding-left:8mm; }}
.desc {{ font-family:'Mulish',sans-serif; font-weight:400; font-size:9.6pt; line-height:1.5; color:#5A5248; margin-top:1.4mm; max-width:172mm; }}
.rule {{ height:1px; background:#D6CBB8; margin:5mm 0 4mm; }}
.catering-title {{ font-family:'Mulish',sans-serif; font-weight:700; font-size:10.5pt; color:#1A1611; letter-spacing:0.4px; margin-bottom:1.5mm; }}
.catering-text {{ font-family:'Mulish',sans-serif; font-weight:400; font-size:9pt; line-height:1.5; color:#5A5248; max-width:150mm; }}
.footer {{ position:absolute; left:16mm; right:16mm; bottom:13mm; }}
</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<br>des Hauses</div>
  <div class="list">{rows}</div>
  <div class="footer">
    <div class="rule"></div>
    <div class="catering-title">Catering &amp; Veranstaltungen</div>
    <div class="catering-text">Planen Sie eine Feier oder Veranstaltung? Wir k&uuml;mmern uns um das kulinarische Erlebnis &ndash; Catering im Restaurant oder bei Ihnen vor Ort. Sprechen Sie unser Team gerne an.</div>
  </div>
</body></html>'''

open('/tmp/durrani_menu.html','w').write(html)

from weasyprint import HTML
HTML(string=html, base_url='/tmp').write_pdf('/tmp/Durrani-Speisekarte-A4.pdf')
print("PDF written")

# PDF -> PNG
png_ok=False
if shutil.which('pdftoppm'):
    subprocess.run(['pdftoppm','-png','-r','150','-singlefile','/tmp/Durrani-Speisekarte-A4.pdf','/tmp/Durrani-Speisekarte-A4'],check=True)
    png_ok=os.path.exists('/tmp/Durrani-Speisekarte-A4.png')
print("pdftoppm:", shutil.which('pdftoppm'), "png_ok:", png_ok)
