"""
Send queued Magento sync notifications via configured email provider.
CLI: python -m app.jobs.send_notifications [--once]
"""

from __future__ import annotations

import argparse
import logging
import sys

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def run_one() -> bool:
    """Send one queued notification. Returns True if processed."""
    from db.session import get_session
    from db.models import MagentoSyncNotification
    from sqlalchemy import select
    from mailer.providers import get_email_sender

    with get_session() as session:
        stmt = (
            select(MagentoSyncNotification)
            .where(MagentoSyncNotification.status == "queued")
            .order_by(MagentoSyncNotification.created_at)
            .limit(1)
        )
        row = session.execute(stmt).scalars().first()
        if not row:
            return False
        sender = get_email_sender()
        ok = sender.send(
            to=row.to_email,
            subject=row.subject,
            text=row.body,
        )
        if ok:
            row.status = "sent"
            from datetime import datetime
            row.sent_at = datetime.utcnow()
            row.error = None
        else:
            row.status = "failed"
            row.error = "Send failed (provider returned false)"
        session.add(row)
        session.commit()
    return True


def main() -> int:
    parser = argparse.ArgumentParser(description="Send queued email notifications")
    parser.add_argument("--once", action="store_true", help="Send one and exit")
    args = parser.parse_args()
    if args.once:
        run_one()
        return 0
    while run_one():
        pass
    return 0


if __name__ == "__main__":
    sys.exit(main())
