"""Piano di abbonamento e limiti per feature.""" PLAN_LIMITS = { "freemium": { "characters_max": 1, "posts_per_month": 15, "platforms": ["facebook", "instagram"], "auto_plans": False, "comments_management": False, "affiliate_links": False, "editorial_calendar_max": 5, }, "pro": { "characters_max": None, "posts_per_month": None, "platforms": ["facebook", "instagram", "youtube", "tiktok"], "auto_plans": True, "comments_management": True, "affiliate_links": True, "editorial_calendar_max": None, }, } def get_plan(user) -> dict: """Returns the effective plan for a user (checks expiry for pro).""" from datetime import datetime plan = getattr(user, "subscription_plan", "freemium") or "freemium" if plan == "pro": expires = getattr(user, "subscription_expires_at", None) if expires and expires < datetime.utcnow(): return PLAN_LIMITS["freemium"] return PLAN_LIMITS.get(plan, PLAN_LIMITS["freemium"]) def check_limit(user, feature: str, current_count: int = 0) -> tuple[bool, str]: """Returns (allowed, error_message).""" limits = get_plan(user) limit = limits.get(feature) if limit is None: return True, "" if isinstance(limit, bool): if not limit: return False, f"Feature '{feature}' non disponibile nel piano Freemium. Passa a Pro." return True, "" if isinstance(limit, int): if current_count >= limit: return False, f"Hai raggiunto il limite del piano Freemium ({limit} {feature}). Passa a Pro." return True, ""