# db_utils.py
from app.models import Subscriptions, Users
from sqlalchemy.orm import joinedload

def get_recipients_by_region(app, region_id: int, severity: str = "") -> list[int]:
    """
    Возвращает список chat_id, подписанных на указанный регион с учётом критичности и фильтром по is_blocked.

    Args:
        app: экземпляр Flask-приложения
        region_id (int): номер региона
        severity (str): уровень критичности события ("Disaster", "High", и т.п.)

    Returns:
        list[int]: список chat_id
    """
    if region_id is None:
        return []

    with app.app_context():
        # Предположим, что поле is_blocked у пользователя, а не у подписки,
        # тогда нужно сделать join по пользователям:
        query = (
            Subscriptions.query
            .join(Users, Users.chat_id == Subscriptions.chat_id)
            .filter(
                Subscriptions.region_id == region_id,
                Subscriptions.active == True,
                Subscriptions.skip == False,
                Users.is_blocked == False  # исключаем заблокированных пользователей
            )
        )

        if severity != "Disaster":
            query = query.filter(Subscriptions.disaster_only == False)

        subs = query.options(joinedload(Subscriptions.user)).all()
        return [sub.chat_id for sub in subs]
