#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Пере-доставка в Хранилище 10031: архив + DOCX + PDF по отдельности, с message_id и верификацией."""
import json, urllib.request, urllib.parse, os, uuid

CHAT_ID = "-1003973539149"; THREAD = 10031
PROXY = "http://127.0.0.1:3128"
BASE = "/home/matvey/projects/icd-macro-model"

tok = None
for line in open(os.path.expanduser("~/.hermes/.env")):
    line = line.strip()
    if line.startswith("TELEGRAM_BOT_TOKEN="):
        tok = line.split("=", 1)[1].strip().strip('"').strip("'"); break
assert tok, "токен не найден"

opener = urllib.request.build_opener(urllib.request.ProxyHandler({"https": PROXY, "http": PROXY}))

def api(method, data=None, files=None, timeout=180):
    url = f"https://api.telegram.org/bot{tok}/{method}"
    if files:
        boundary = uuid.uuid4().hex
        body = b""
        for k, v in (data or {}).items():
            body += f'--{boundary}\r\nContent-Disposition: form-data; name="{k}"\r\n\r\n{v}\r\n'.encode()
        for k, path in files.items():
            fn = os.path.basename(path)
            body += f'--{boundary}\r\nContent-Disposition: form-data; name="{k}"; filename="{fn}"\r\nContent-Type: application/octet-stream\r\n\r\n'.encode()
            body += open(path, "rb").read() + b"\r\n"
        body += f"--{boundary}--\r\n".encode()
        req = urllib.request.Request(url, data=body, method="POST",
            headers={"Content-Type": f"multipart/form-data; boundary={boundary}"})
    else:
        req = urllib.request.Request(url, data=urllib.parse.urlencode(data or {}).encode(), method="POST")
    r = opener.open(req, timeout=timeout)
    return json.loads(r.read())

# 1) что бот видит в чате (валидация доступа)
chat = api("getChat", {"chat_id": CHAT_ID})
print("чат:", chat.get("ok"), "|", chat.get("result", {}).get("title"))

files = [
    (f"{BASE}/dist/icd_macro_model_20261103.tar.gz",
     "📦 Архив комплекта icd-macro-model (03.11.2026, 6 файлов, sha256 fa1599…7826)"),
    (f"{BASE}/Записка_ЦД_отрасли_ЭС2050_для_обсуждения.docx",
     "📄 Записка для обсуждения в компании: ЦД отрасли от ЭС-2050 (908-р) · DOCX"),
    (f"{BASE}/model_v1.1.pdf",
     "📊 Макро-модель управления процессами ИЦД · v1.1 с правками аудита · PDF 5 стр."),
]
for path, caption in files:
    size = os.path.getsize(path)
    r = api("sendDocument",
            {"chat_id": CHAT_ID, "message_thread_id": THREAD, "caption": caption},
            files={"document": path})
    ok = r.get("ok"); res = r.get("result", {})
    doc = res.get("document", {})
    print(f"{os.path.basename(path)}: ok={ok} msg_id={res.get('message_id')} "
          f"file_size={doc.get('file_size')} (локально {size}) "
          f"{'✅' if ok and doc.get('file_size') == size else '❌ НЕ СХОДИТСЯ'}")
