"""Когда слать утренний пуш.

Раньше пуш стоял жёстко на 06:50, а Apple Health доезжает в волт только когда
мак проснулся, — и в 06:50 данных за вчера часто ещё нет. Поэтому таймер теперь
тикает всё утро, а решение «слать или ждать» принимается здесь: как только
вчерашний день появился — шлём и до конца суток больше не трогаем. Если к
полудню данных так и нет, шлём как есть: ежедневный никогда не молчит.
"""

import json
from datetime import date, timedelta

# После этого часа ждать смысла нет — утро прошло.
DEADLINE_HOUR = 12


def decide(freshness, today, now, last_sent, deadline_hour=DEADLINE_HOUR):
    """→ (слать ли, причина). freshness — последний день с данными в волте."""
    if last_sent == today:
        return False, "уже отправлено сегодня"
    if freshness is not None and freshness >= today - timedelta(days=1):
        return True, "данные за вчера на месте"
    if now.hour < deadline_hour:
        return False, "данных за вчера ещё нет — ждём синка с мака"
    return True, "данных за вчера так и нет, но утро прошло — шлём как есть"


def load_last_sent(path):
    """Дата последней отправки. Нет файла или он битый — считаем, что не слали."""
    try:
        return date.fromisoformat(json.loads(path.read_text(encoding="utf-8"))["last_sent"])
    except (OSError, ValueError, KeyError, TypeError):
        return None


def save_last_sent(path, day):
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps({"last_sent": day.isoformat()}), encoding="utf-8")
