"""Background worker entry point: publishes scheduled posts when they are due (ADR-005).

Run by the dedicated scheduler container:  python -m app.scheduler
One loop, one writer — never run two scheduler containers against the same database.
"""
import logging
import time

from app import create_app, db
from app.services.scheduled import run_due_posts

log = logging.getLogger("app.scheduler")


def main():
    logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s %(message)s")
    app = create_app()
    interval = app.config["SCHEDULER_INTERVAL_SECONDS"]
    log.info("scheduler.start interval=%ss", interval)
    while True:
        try:
            with app.app_context():
                processed = run_due_posts()
                if processed:
                    log.info("scheduler.tick processed=%s", processed)
                db.session.remove()
        except Exception:
            log.error("scheduler.tick failed", exc_info=True)
        time.sleep(interval)


if __name__ == "__main__":
    main()
