#!/usr/bin/env python3
# Генерация «Постный рацион на 7 дней» (docx)
import sys, importlib.util
spec = importlib.util.spec_from_file_location("prc", "/root/site/video/post_ration_calc.py")
prc = importlib.util.module_from_spec(spec)
spec.loader.exec_module(prc)

from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

P = prc.P
DAYS = prc.DAYS

def calc(items):
    k = b = f = c = 0.0
    for name, g in items:
        kk, bb, ff, cc = P[name]
        k += kk*g/100; b += bb*g/100; f += ff*g/100; c += cc*g/100
    return round(k), round(b), round(f), round(c)

def fmt(items):
    names = {
        "хлеб цз": "хлеб цельнозерновой",
        "спагетти цз": "спагетти цельнозерновые",
        "цветная": "цветная капуста",
        "нут варёный": "нут отварной",
        "фасоль варёная": "фасоль отварная",
    }
    return " + ".join(f"{names.get(n, n)} {g} г" for n, g in items)

doc = Document()
style = doc.styles["Normal"]
style.font.name = "Calibri"
style.font.size = Pt(10.5)

# Заголовок
h = doc.add_heading("Постный рацион на 7 дней", level=0)
h.alignment = WD_ALIGN_PARAGRAPH.CENTER
sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = sub.add_run("Успенский пост · 14–27 августа 2026")
r.bold = True; r.font.size = Pt(14)
info = doc.add_paragraph()
info.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = info.add_run("Персонально для Михаила Смирнова · 46 лет · 182 см · 136 кг · цель −7–14 кг за 3 месяца")
r.font.size = Pt(10)
norm = doc.add_paragraph()
norm.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = norm.add_run("Норма: 1800–1900 ккал/день · вода 2 л · сахар и сладкие напитки исключены\nПравило поста: рыба и морепродукты — во все дни, кроме среды и пятницы")
r.font.size = Pt(10); r.italic = True

# Дни
MEAL_NAMES = ["Завтрак 8:00", "Перекус 11:00", "Обед 14:00", "Полдник 17:00", "Ужин 19:00"]
for day, meals in DAYS:
    totals = [0,0,0,0]
    for m in meals:
        r_ = calc(m)
        for i in range(4): totals[i] += r_[i]
    dh = doc.add_heading(day, level=1)
    it = doc.add_paragraph()
    r = it.add_run(f"Итого: {totals[0]} ккал · Б {totals[1]} г · Ж {totals[2]} г · У {totals[3]} г")
    r.bold = True
    table = doc.add_table(rows=1, cols=3)
    table.style = "Light Grid Accent 1"
    hdr = table.rows[0].cells
    for i, t in enumerate(["Приём", "Блюдо", "КБЖУ"]):
        hdr[i].text = t
        hdr[i].paragraphs[0].runs[0].bold = True
    for name, items in zip(MEAL_NAMES, meals):
        k, b, f, c = calc(items)
        row = table.add_row().cells
        row[0].text = name
        row[1].text = fmt(items)
        row[2].text = f"{k} ккал · Б{b}/Ж{f}/У{c}"
    doc.add_paragraph()

# Список покупок
doc.add_heading("Список покупок на неделю", level=1)
shopping = [
    ("Рыба и морепродукты (заморозка ок):", "треска 400 г, минтай 200 г, судак 200 г, горбуша 180 г, креветки 200 г — всего ~1,2 кг"),
    ("Белки растительные:", "тофу 800 г, чечевица 300 г, нут (сухой) 200 г, фасоль (сухая) 250 г, хумус 140 г, соевый йогурт 600 мл, соевое молоко 900 мл"),
    ("Крупы и хлеб:", "овсянка 110 г, гречка 370 г, пшено 120 г, булгур 130 г, киноа 210 г, спагетти ц/з 70 г, хлеб цельнозерновой ~400 г, хлебцы ржаные 30 г"),
    ("Овощи:", "картофель 800 г, кабачки 450 г, баклажан 200 г, перец 300 г, помидоры 800 г, огурцы 420 г, капуста 450 г, морковь 500 г, свёкла 60 г, тыква 150 г, брокколи 200 г, цветная капуста 200 г, грибы 500 г, лук 200 г, зелень"),
    ("Фрукты и ягоды:", "яблоки 5 шт, груши 2 шт, банан 1 шт, апельсины 2 шт, ягоды 400 г (замороженные ок)"),
    ("Орехи и семена:", "миндаль ~70 г, грецкие ~55 г, арахис ~60 г, семечки 35 г, лён 30 г"),
    ("Прочее:", "масло растительное (оливковое) ~50 мл, томатная паста 100 г, специи, соль, лимон, сахарозаменитель (стевия)"),
]
for cat, items in shopping:
    p = doc.add_paragraph(style="List Bullet")
    r = p.add_run(cat + " "); r.bold = True
    p.add_run(items)

# Правила
doc.add_heading("Правила", level=1)
rules = [
    "Ужин до 19:30–20:00, после — только вода или травяной чай",
    "Вода 2 л/день: стакан за 20 мин до еды",
    "Овощи в обед и ужин — без ограничений (кроме картофеля)",
    "Рыбу и морепродукты — варить, запекать, на пару; жарить без масла (гриль, антипригарная сковорода)",
    "В строго постные дни (среда, пятница) белок добираем бобовыми и тофу — это нормально для поста",
    "Срыв — не страшно: следующий приём снова по плану",
    "Весы раз в неделю утром натощак: фиксируй, я буду следить",
]
for rtext in rules:
    p = doc.add_paragraph(style="List Bullet")
    p.add_run(rtext)

note = doc.add_paragraph()
r = note.add_run("Примечание: 19 августа — Преображение Господне, по уставу в этот праздник рыба разрешена даже в среду. Я сделал среду постной по твоему правилу, но если захочешь горбушу в Преображение — просто замени постный ужин на рыбу.")
r.italic = True; r.font.size = Pt(9.5)

doc.save("/root/site/video/Постный рацион на 7 дней.docx")
print("Сохранён: /root/site/video/Постный рацион на 7 дней.docx")
