"""Entity status transitions and special location effects.""" from __future__ import annotations from datetime import datetime, timedelta from world.book_of_ages import create_entry from world.database import db_session from world.entities import add_tag, update_entity_status from world.locations import get_location_by_id from simulation.location_effects import effective_days_in_realm def process_lifecycle_updates(world_day: int) -> list[str]: """Run lifecycle checks. Returns list of milestone messages.""" milestones = [] with db_session() as conn: entities = conn.execute("SELECT * FROM entities").fetchall() for row in entities: entity = dict(row) location = get_location_by_id(entity["location_id"]) if entity["status"] == "active": last_active = datetime.fromisoformat(entity["last_active"]) if datetime.now() - last_active > timedelta(days=7): update_entity_status(entity["id"], "dormant") msg = f"{entity['name']} has grown quiet and entered dormancy." create_entry( world_day=world_day, entry_type="milestone", content=msg, entity_ids=[entity["id"]], is_milestone=True, title="Dormancy", ) milestones.append(msg) if entity["status"] == "dormant": last_active = datetime.fromisoformat(entity["last_active"]) days_dormant = (datetime.now() - last_active).days if days_dormant >= 30: update_entity_status(entity["id"], "legendary") msg = f"{entity['name']} has become Legendary — woven into the Realm's foundation." create_entry( world_day=world_day, entry_type="milestone", content=msg, entity_ids=[entity["id"]], is_milestone=True, title="Legendary Status", ) milestones.append(msg) entity["location_slug"] = location["slug"] if location else None eff_days = effective_days_in_realm(entity) if location and location["slug"] == "hollow-mountain": if eff_days >= 14 and not entity["wisdom_unlocked"]: add_tag(entity["id"], "wise") with db_session() as conn: conn.execute( "UPDATE entities SET wisdom_unlocked = 1 WHERE id = ?", (entity["id"],), ) msg = f"{entity['name']} earned wisdom in the Hollow Mountain." create_entry( world_day=world_day, entry_type="milestone", content=msg, entity_ids=[entity["id"]], is_milestone=True, title="Wisdom Earned", ) milestones.append(msg) return milestones