from __future__ import annotations from dataclasses import dataclass from sqlalchemy.orm import Session from app.config import get_settings from app.memory.service import MemoryService @dataclass(frozen=True) class EveningSchedule: enabled: bool hour: int minute: int def resolve_evening_schedule(db: Session, user_id: int) -> EveningSchedule: settings = get_settings() profile = MemoryService(db, user_id).get_profile() enabled_raw = profile.get("evening_summary_enabled") if enabled_raw is None: enabled = settings.evening_summary_enabled else: enabled = bool(enabled_raw) if not isinstance(enabled_raw, str) else enabled_raw.lower() in ( "1", "true", "yes", "on", ) hour = profile.get("evening_summary_hour") minute = profile.get("evening_summary_minute") try: resolved_hour = int(hour) if hour is not None and str(hour).strip() != "" else settings.evening_summary_hour except (TypeError, ValueError): resolved_hour = settings.evening_summary_hour try: resolved_minute = ( int(minute) if minute is not None and str(minute).strip() != "" else settings.evening_summary_minute ) except (TypeError, ValueError): resolved_minute = settings.evening_summary_minute return EveningSchedule( enabled=enabled, hour=max(0, min(23, resolved_hour)), minute=max(0, min(59, resolved_minute)), )