"""Окно недели для контент-планёрки.

Прогон один — воскресный. Он планирует СЛЕДУЮЩУЮ неделю целиком: скелет на
все семь дней (слоты, обязательные вставки, реклама) и темы на каждый день.

Раньше прогонов было два: воскресенье доводило темы до среды, а среднедельный
прогон дописывал чт–вс, потому что тема живёт трое суток и к четвергу план
читался как позавчерашняя газета. Сейчас свежесть держит утренний прогон
(morning.sh, ежедневно 8:15): он сверяет тему сегодняшнего дня со всем, что
появилось за сутки. Ежедневная сверка перекрывает среднедельную, поэтому
режим refresh выпилен (29.07.2026) — вместе с ним ушло и понятие «вторая
половина недели».

Запуск:
  python3 weekdates.py [ГГГГ-ММ-ДД]             → WEEK_START WEEK_END (следующая)
  python3 weekdates.py --current [ГГГГ-ММ-ДД]   → понедельник ТЕКУЩЕЙ недели

Второй режим нужен утреннему прогону: он работает с уже идущей неделей и по
её понедельнику собирает имя файла плана. Живёт здесь, а не в morning.sh,
по той же причине, по какой тут живёт всё остальное — арифметика недели
должна считаться в одном месте и одинаково. Первая версия morning.sh считала
понедельник через `date -d`, которого нет в BSD date: на Маке скрипт молча
выходил нулём, не собрав ничего, и проверить утро на Маке было нельзя вообще.
"""
from __future__ import annotations

from datetime import date, timedelta


def week_start(today: date) -> date:
    """Понедельник недели, которую планирует прогон.

    Ближайший будущий понедельник. В сам понедельник — следующий, а не
    сегодняшний: прогон всегда планирует неделю вперёд, и ручной запуск в пн
    не должен молча переписать уже идущую неделю.
    """
    shift = (0 - today.weekday() + 7) % 7 or 7
    return today + timedelta(days=shift)


def current_week_start(today: date) -> date:
    """Понедельник недели, которая идёт СЕЙЧАС (в понедельник — он сам)."""
    return today - timedelta(days=today.weekday())


def week_end(start: date) -> date:
    return start + timedelta(days=6)


def window(today: date):
    start = week_start(today)
    return start, week_end(start)


def main(argv=None) -> int:
    import sys

    argv = list(argv if argv is not None else sys.argv[1:])
    current = False
    if "--current" in argv:
        argv.remove("--current")
        current = True
    today = date.fromisoformat(argv[0]) if argv else date.today()
    if current:
        print(current_week_start(today).isoformat())
        return 0
    start, end = window(today)
    print("{} {}".format(start.isoformat(), end.isoformat()))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
