#!/usr/bin/env python3
# Чтение входящих sk@dobrotniy-dom.ru через IMAP XOAUTH2 (OAuth-токен владельца)
import imaplib, email, base64, sys
from email.header import decode_header, make_header
from email.utils import parsedate_to_datetime
from datetime import datetime, timedelta, timezone

token = None
for line in open("/root/site/yandex/.env", encoding="utf-8"):
    if line.startswith("YANDEX_ACCESS_TOKEN="):
        token = line.split("=", 1)[1].strip()

USER = "sk@dobrotniy-dom.ru"
auth_string = f"user={USER}\x01auth=Bearer {token}\x01\x01"

M = imaplib.IMAP4_SSL("imap.yandex.ru", 993, timeout=60)
try:
    M.authenticate("XOAUTH2", lambda x: auth_string.encode())
    print("AUTH OK")
except imaplib.IMAP4.error as e:
    print("AUTH FAIL:", e)
    # попробовать логин (на случай если у токена нет почты)
    sys.exit(1)

M.select("INBOX")
# последние 7 дней
since = (datetime.now(timezone.utc) - timedelta(days=7)).strftime("%d-%b-%Y")
typ, data = M.search(None, f'(SINCE {since})')
ids = data[0].split()
print("Писем за 7 дней:", len(ids))

subjects = []
for i in ids[-40:]:
    typ, msg_data = M.fetch(i, "(BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)])")
    raw = msg_data[0][1]
    msg = email.message_from_bytes(raw)
    frm = str(make_header(decode_header(msg.get("From", ""))))
    subj = str(make_header(decode_header(msg.get("Subject", ""))))
    date = msg.get("Date", "")
    subjects.append((i.decode(), frm, subj, date))

M.logout()

# фильтр: похоже на заявку
KEYWORDS = ["заявк", "звонок", "сайт", "обратн", "расчёт", "расчет", "смет", "добротный",
            "кп", "коммерческ", "проект", "дом", "строитель", "каркасн", "цена", "стоимост"]
print("\n=== Все письма за 7 дней (первые 40): ===")
for i, frm, subj, date in subjects:
    flag = ""
    sl = subj.lower()
    if any(k in sl for k in KEYWORDS):
        flag = " ★"
    print(f"[{i}] {date} | {frm[:40]} | {subj[:70]}{flag}")
