"""
Event Registration Module

This module contains functions for registering event handlers and events at server startup.
These functions are called once during initialization and have no runtime performance impact.

Functions:
    - register_all_event_handlers(): Registers all event handler functions with the event handler system
    - register_all_events(): Registers all game events with conditions for efficient filtering
"""

import logging
from events import *
import dayEvents
import conversationEvents
import tutorial_events
from retention import tutorial
from event_handlers import register_event_handler, _registry
from event_registry import register_event, event_count

# Setup logging
logger = logging.getLogger(__name__)


def register_all_event_handlers():
    """Register all valid event handlers"""
    # Event handlers from events.py
    register_event_handler("actTest", actTest)
    register_event_handler("actTestTake", actTestTake)
    register_event_handler("braceletDilemma", braceletDilemma)
    register_event_handler("braces", braces)
    register_event_handler("breakArm", breakArm)
    register_event_handler("bullyDilemma", bullyDilemma)
    register_event_handler("carCrash", carCrash)
    register_event_handler("childBorn", childBorn)
    register_event_handler("childLearnedWalk", childLearnedWalk)
    register_event_handler("childhoodActivity", childhoodActivity)
    register_event_handler("chooseCollege", chooseCollege)
    register_event_handler("chooseMajor", chooseMajor)
    register_event_handler("collegeExtracurricular", collegeExtracurricular)
    register_event_handler("dating_choice", dating_choice)
    register_event_handler("dropBooks", dropBooks)
    register_event_handler("employeeOfTheMonth", employeeOfTheMonth)
    register_event_handler("extracurricular", extracurricular)
    register_event_handler("fieldTrip", fieldTrip)
    register_event_handler("firstCrush", firstCrush)
    register_event_handler("firstJob", firstJob)
    register_event_handler("firstKiss", firstKiss)
    register_event_handler("forgotCombo", forgotCombo)
    register_event_handler("foundAPenny", foundAPenny)
    register_event_handler("freeConcert", freeConcert)
    register_event_handler("foundMoneyStreet", foundMoneyStreet)
    register_event_handler("freeUpgrade", freeUpgrade)
    register_event_handler("unexpectedCompliment", unexpectedCompliment)
    register_event_handler("perfectParkingSpot", perfectParkingSpot)
    register_event_handler("rainbowSighting", rainbowSighting)
    register_event_handler("spilledDrink", spilledDrink)
    register_event_handler("phoneDropped", phoneDropped)
    register_event_handler("birdPooped", birdPooped)
    register_event_handler("forgotWallet", forgotWallet)
    register_event_handler("missedBus", missedBus)
    register_event_handler("badHairDay", badHairDay)
    register_event_handler("caughtInRain", caughtInRain)
    register_event_handler("lostKeys", lostKeys)
    register_event_handler("ruinedClothes", ruinedClothes)
    register_event_handler("badRestaurantExperience", badRestaurantExperience)
    register_event_handler("sleepThroughAlarm", sleepThroughAlarm)
    register_event_handler("packageStolen", packageStolen)
    register_event_handler("phoneBreakdown", phoneBreakdown)
    register_event_handler("dataLoss", dataLoss)
    register_event_handler("socialMediaCanceled", socialMediaCanceled)
    register_event_handler("cyberbullying", cyberbullying)
    register_event_handler("accountHacked", accountHacked)
    register_event_handler("glasses", glasses)
    register_event_handler("haveChild", haveChild)
    register_event_handler("healthCondition", healthCondition)
    register_event_handler("jobApplication", jobApplication)
    register_event_handler("latetoSchool", latetoSchool)
    register_event_handler("learnInstrument", learnInstrument)
    register_event_handler("learnedBike", learnedBike)
    register_event_handler("learnedSwim", learnedSwim)
    register_event_handler("learnedWalk", learnedWalk)
    register_event_handler("learningColors", learningColors)
    register_event_handler("likeSchool", likeSchool)
    register_event_handler("lostFirstTooth", lostFirstTooth)
    register_event_handler("lostLastTooth", lostLastTooth)
    register_event_handler("lowAffinity", lowAffinity)
    register_event_handler("lowEnergyEvent", lowEnergyEvent)
    register_event_handler("marriage", marriage)
    register_event_handler("minorInjury", minorInjury)
    register_event_handler("minorSickness", minorSickness)
    register_event_handler("negativeHabitEvent", negativeHabitEvent)
    register_event_handler("annualCheckup", annualCheckup)
    register_event_handler("allergySymptoms", allergySymptoms)
    register_event_handler("dentalCavity", dentalCavity)
    register_event_handler("mentalHealthDay", mentalHealthDay)
    register_event_handler("sprainedAnkle", sprainedAnkle)
    register_event_handler("eyeStrain", eyeStrain)
    register_event_handler("backPain", backPain)
    register_event_handler("firstGrayHair", firstGrayHair)
    register_event_handler("sleepDisorder", sleepDisorder)
    register_event_handler("foodPoisoning", foodPoisoning)
    register_event_handler("newFriend", newFriend)
    register_event_handler("oneTimeEventTest", oneTimeEventTest)
    register_event_handler("openbankAccount", openbankAccount)
    register_event_handler("playDate", playDate)
    register_event_handler("pregnant", pregnant)
    register_event_handler("romanticDate", romanticDate)
    register_event_handler("satTest", satTest)
    register_event_handler("schoolAssembly", schoolAssembly)
    register_event_handler("schoolFight", schoolFight)
    register_event_handler("schoolLunch", schoolLunch)
    register_event_handler("startedPeriod", startedPeriod)
    register_event_handler("tiredinClass", tiredinClass)
    register_event_handler("vendingMachine", vendingMachine)
    register_event_handler("wedding", wedding)

    # New childhood events
    register_event_handler("firstDayOfPreschool", firstDayOfPreschool)
    register_event_handler("imaginaryFriend", imaginaryFriend)
    register_event_handler("firstNightmare", firstNightmare)
    register_event_handler("petGoldfish", petGoldfish)
    register_event_handler("scaredOfDark", scaredOfDark)
    register_event_handler("firstTimeTyingShoes", firstTimeTyingShoes)
    register_event_handler("sandboxDisagreement", sandboxDisagreement)
    register_event_handler("pickySomeEater", pickySomeEater)
    register_event_handler("firstHaircut", firstHaircut)

    # Childhood setback events
    register_event_handler("lostFavoriteToy", lostFavoriteToy)
    register_event_handler("notInvitedToParty", notInvitedToParty)
    register_event_handler("scolded", scolded)
    register_event_handler("lostGame", lostGame)
    register_event_handler("friendMovedAway", friendMovedAway)

    # New adolescence life events
    register_event_handler("groupProjectDrama", groupProjectDrama)
    register_event_handler("voiceCracking", voiceCracking)
    register_event_handler("bodySelfConsciousness", bodySelfConsciousness)
    register_event_handler("curfewArgument", curfewArgument)
    register_event_handler("growthSpurt", growthSpurt)
    register_event_handler("embarrassingSituation", embarrassingSituation)
    register_event_handler("sleepover", sleepover)
    register_event_handler("socialMediaPressure", socialMediaPressure)
    register_event_handler("fashionExperimentation", fashionExperimentation)
    register_event_handler("learningToDrive", learningToDrive)

    # Quick wins education events
    register_event_handler("popQuiz", popQuiz)
    register_event_handler("raisedHandNotCalled", raisedHandNotCalled)
    register_event_handler("lostHomework", lostHomework)
    register_event_handler("presentationNerves", presentationNerves)
    register_event_handler("teacherFavorite", teacherFavorite)
    register_event_handler("studyGroupInvite", studyGroupInvite)
    register_event_handler("extracurricularBurnout", extracurricularBurnout)
    register_event_handler("cafeteriaFoodPoisoning", cafeteriaFoodPoisoning)
    register_event_handler("substituteTeacher", substituteTeacher)
    register_event_handler("collegeAllNighter", collegeAllNighter)

    # Adulthood life events
    register_event_handler("firstApartment", firstApartment)
    register_event_handler("workLifeBalance", workLifeBalance)
    register_event_handler("forgotBirthdayCall", forgotBirthdayCall)
    register_event_handler("friendsDrifting", friendsDrifting)
    register_event_handler("unexpectedBill", unexpectedBill)
    register_event_handler("promotionOpportunity", promotionOpportunity)
    register_event_handler("agingParent", agingParent)
    register_event_handler("careerChangeDesire", careerChangeDesire)
    register_event_handler("coworkerRivalry", coworkerRivalry)
    register_event_handler("divorceConsideration", divorceConsideration)

    # Dilemma event handlers
    register_event_handler("colleagueStealingCredit", colleagueStealingCredit)
    register_event_handler("environmentalChoice", environmentalChoice)
    register_event_handler("foundExpensiveItem", foundExpensiveItem)
    register_event_handler("foundLostPet", foundLostPet)
    register_event_handler("friendBorrowMoney", friendBorrowMoney)
    register_event_handler("friendCheating", friendCheating)
    register_event_handler("parentCareDecision", parentCareDecision)
    register_event_handler("strayAnimalDecision", strayAnimalDecision)
    register_event_handler("whistleblowerDecision", whistleblowerDecision)
    register_event_handler("witnessShoplifting", witnessShoplifting)

    # Event handlers from dayEvents.py
    register_event_handler("christmas", dayEvents.christmas)
    register_event_handler("newYear", dayEvents.newYear)
    register_event_handler("thanksgiving", dayEvents.thanksgiving)
    register_event_handler("blackfriday", dayEvents.blackfriday)
    register_event_handler("independenceday", dayEvents.independenceday)
    register_event_handler("immunizations", dayEvents.immunizations)
    register_event_handler("vacation", dayEvents.vacation)
    register_event_handler("newFood", dayEvents.newFood)
    register_event_handler("puberty", dayEvents.puberty)
    register_event_handler("school", dayEvents.school)
    register_event_handler("graduate5th", dayEvents.graduate5th)
    register_event_handler("graduate8th", dayEvents.graduate8th)
    register_event_handler("graduate12th", dayEvents.graduate12th)
    register_event_handler("college", dayEvents.college)
    register_event_handler("collegeParty", dayEvents.collegeParty)
    register_event_handler("collegeGreekLife", dayEvents.collegeGreekLife)
    register_event_handler("collegeMissHome", dayEvents.collegeMissHome)
    register_event_handler("adultMissFriends", dayEvents.adultMissFriends)
    register_event_handler("collegeMinor", dayEvents.collegeMinor)
    register_event_handler("birthday", dayEvents.birthday)
    register_event_handler("driversLessons", dayEvents.driversLessons)
    register_event_handler("driversTest", dayEvents.driversTest)
    register_event_handler("positiveInteraction", dayEvents.positiveInteraction)
    register_event_handler("lowEnergyEvents", dayEvents.lowEnergyEvents)
    register_event_handler("extendedFamily", dayEvents.extendedFamily)
    register_event_handler("murderAttempt", dayEvents.murderAttempt)
    register_event_handler("funeral", dayEvents.funeral)

    # School year events
    register_event_handler("summerReading", summerReading)
    register_event_handler("classRankReveal", classRankReveal)
    register_event_handler("seniorSurvey", seniorSurvey)
    register_event_handler("finalExamWeek", finalExamWeek)
    register_event_handler("summerJobSearch", summerJobSearch)
    register_event_handler("promInvite", promInvite)
    register_event_handler("dormRoommate", dormRoommate)
    register_event_handler("seniorSkipDay", seniorSkipDay)
    register_event_handler("collegeHomesick", collegeHomesick)
    register_event_handler("changeMyMajor", changeMyMajor)

    # Event handlers from conversationEvents.py
    register_event_handler("conversationInit", conversationEvents.conversationInit)

    # Event handlers from tutorial_events.py
    register_event_handler("firstConversation", tutorial_events.firstConversation)
    register_event_handler("firstActivityChoice", tutorial_events.firstActivityChoice)
    register_event_handler("tutorialComplete", tutorial_events.tutorialComplete)

    # Event handlers from retention/tutorial.py
    register_event_handler("tutorialStepComplete", tutorial.handle_tutorial_step_complete)
    register_event_handler("tooltipSeen", tutorial.handle_tooltip_seen)
    register_event_handler("completeOnboarding", tutorial.handle_complete_onboarding)

    # Physical activity events
    register_event_handler("joinSoccerTeam", joinSoccerTeam)
    register_event_handler("learnMartialArts", learnMartialArts)
    register_event_handler("runningHabit", runningHabit)
    register_event_handler("joinGym", joinGym)
    register_event_handler("yogaClass", yogaClass)

    # Learning & Educational activity events
    register_event_handler("onlineCourse", onlineCourse)
    register_event_handler("learnLanguage", learnLanguage)
    register_event_handler("codingBootcamp", codingBootcamp)
    register_event_handler("musicLessons", musicLessons)
    register_event_handler("cookingClasses", cookingClasses)

    # Career & Work activity events
    register_event_handler("professionalConference", professionalConference)
    register_event_handler("mentorJunior", mentorJunior)
    register_event_handler("sideHustle", sideHustle)
    register_event_handler("networkingEvent", networkingEvent)
    register_event_handler("professionalCertification", professionalCertification)

    # Creative & Artistic activity events
    register_event_handler("learnPainting", learnPainting)
    register_event_handler("writingJournal", writingJournal)
    register_event_handler("learnPhotography", learnPhotography)
    register_event_handler("theatreAudition", theatreAudition)
    register_event_handler("craftingHobby", craftingHobby)

    # Seasonal & Outdoor activity events
    register_event_handler("campingTrip", campingTrip)
    register_event_handler("skiingVacation", skiingVacation)
    register_event_handler("beachDay", beachDay)
    register_event_handler("hikingAdventure", hikingAdventure)
    register_event_handler("autumnActivities", autumnActivities)

    # Social activity events
    register_event_handler("joinClub", joinClub)
    register_event_handler("volunteerWork", volunteerWork)
    register_event_handler("bookClub", bookClub)
    register_event_handler("gamingGroup", gamingGroup)
    register_event_handler("communityEvent", communityEvent)

    # Family activity events
    register_event_handler("familyGameNight", familyGameNight)
    register_event_handler("familyVacation", familyVacation)
    register_event_handler("teachSiblingSkill", teachSiblingSkill)
    register_event_handler("helpParentProject", helpParentProject)
    register_event_handler("familyPhoto", familyPhoto)

    # Family conflict events (negative)
    register_event_handler("parentDivorce", parentDivorce)
    register_event_handler("siblingRivalry", siblingRivalry)
    register_event_handler("familyEstrangement", familyEstrangement)
    register_event_handler("parentIllness", parentIllness)
    register_event_handler("familyDebt", familyDebt)
    register_event_handler("inheritanceDispute", inheritanceDispute)

    # Hobbies & Personal Development activity events
    register_event_handler("gardening", gardening)
    register_event_handler("meditation", meditation)
    register_event_handler("birdWatching", birdWatching)
    register_event_handler("collectionHobby", collectionHobby)
    register_event_handler("readingChallenge", readingChallenge)

    # Negative events - Academic challenges
    register_event_handler("failedTest", failedTest)
    register_event_handler("rejectedFromCollege", rejectedFromCollege)
    register_event_handler("academicProbation", academicProbation)
    register_event_handler("groupProjectBetrayal", groupProjectBetrayal)
    register_event_handler("plagiarismAccusation", plagiarismAccusation)

    # Negative events - Career setbacks
    register_event_handler("passedOverPromotion", passedOverPromotion)
    register_event_handler("workplaceBullying", workplaceBullying)
    register_event_handler("projectFailure", projectFailure)
    register_event_handler("badPerformanceReview", badPerformanceReview)
    register_event_handler("businessFailure", businessFailure)

    # Negative events - Financial problems
    register_event_handler("carBreakdown", carBreakdown)
    register_event_handler("scammed", scammed)
    register_event_handler("identityTheft", identityTheft)
    register_event_handler("lostJob", lostJob)
    register_event_handler("rentalEviction", rentalEviction)
    register_event_handler("taxAudit", taxAudit)
    register_event_handler("investmentLoss", investmentLoss)

    # Negative events - Health & wellness issues
    register_event_handler("injuryFromAccident", injuryFromAccident)
    register_event_handler("chronicPain", chronicPain)
    register_event_handler("dentalEmergency", dentalEmergency)
    register_event_handler("seriousIllness", seriousIllness)
    register_event_handler("weightGain", weightGain)
    register_event_handler("sleepDeprivation", sleepDeprivation)
    register_event_handler("addictionProblem", addictionProblem)

    # Negative events - Social & Relationship Problems
    register_event_handler("publicEmbarrassment", publicEmbarrassment)
    register_event_handler("friendshipBetrayal", friendshipBetrayal)
    register_event_handler("romanticRejection", romanticRejection)
    register_event_handler("breakup", breakup)
    register_event_handler("socialMediaDrama", socialMediaDrama)
    register_event_handler("leftOutOfGroup", leftOutOfGroup)
    register_event_handler("argumentWithFriend", argumentWithFriend)
    register_event_handler("partyDisaster", partyDisaster)

    # Negative events - Major life crises
    register_event_handler("houseFireDamage", houseFireDamage)
    register_event_handler("legalTrouble", legalTrouble)
    register_event_handler("victimOfCrime", victimOfCrime)
    register_event_handler("majorAccident", majorAccident)
    register_event_handler("naturalDisaster", naturalDisaster)

    print(f"Registered {len(_registry.list_events())} event handlers")


def register_all_events():
    """Register all game events with conditions for efficient filtering"""

    # Early childhood events (age 0-5)
    register_event("learnedWalk", learnedWalk, age_range=(0, 5))
    register_event("learningColors", learningColors, age_range=(2, 3))
    register_event("lostFirstTooth", lostFirstTooth, age_range=(5, 8))
    register_event("lostLastTooth", lostLastTooth, age_range=(10, 14))
    register_event("immunizations", dayEvents.immunizations, age_range=(0, 5))
    register_event("childhoodActivity", childhoodActivity, age_range=(3, 12))
    register_event("learnedBike", learnedBike, age_range=(4, 10))
    register_event("learnedSwim", learnedSwim, age_range=(4, 12))
    register_event("newFood", dayEvents.newFood, age_range=(0, 10))

    # New early childhood events
    register_event("firstDayOfPreschool", firstDayOfPreschool, age_range=(3, 4))
    register_event("imaginaryFriend", imaginaryFriend, age_range=(3, 5))
    register_event("firstNightmare", firstNightmare, age_range=(3, 6))
    register_event("petGoldfish", petGoldfish, age_range=(4, 7))
    register_event("scaredOfDark", scaredOfDark, age_range=(4, 6))
    register_event("firstTimeTyingShoes", firstTimeTyingShoes, age_range=(5, 7))
    register_event("sandboxDisagreement", sandboxDisagreement, age_range=(3, 5))
    register_event("pickySomeEater", pickySomeEater, age_range=(2, 4))
    register_event("firstHaircut", firstHaircut, age_range=(2, 4))

    # Childhood setback events
    register_event("lostFavoriteToy", lostFavoriteToy, age_range=(2, 8))
    register_event("notInvitedToParty", notInvitedToParty, age_range=(5, 12))
    register_event("scolded", scolded, age_range=(3, 12))
    register_event("lostGame", lostGame, age_range=(5, 15))
    register_event("friendMovedAway", friendMovedAway, age_range=(5, 18))

    # School-age events (age 6-18)
    register_event("school", dayEvents.school, age_range=(6, 18))
    register_event("likeSchool", likeSchool, age_range=(6, 18))
    register_event("dropBooks", dropBooks, age_range=(6, 18))
    register_event("fieldTrip", fieldTrip, age_range=(6, 18))
    register_event("schoolAssembly", schoolAssembly, age_range=(6, 18))
    register_event("schoolFight", schoolFight, age_range=(11, 18))
    register_event("schoolLunch", schoolLunch, age_range=(6, 18))
    register_event("forgotCombo", forgotCombo, age_range=(11, 18))
    register_event("latetoSchool", latetoSchool, age_range=(6, 18))
    register_event("tiredinClass", tiredinClass, age_range=(6, 18))
    register_event("graduate5th", dayEvents.graduate5th, age_range=(10, 11))
    register_event("graduate8th", dayEvents.graduate8th, age_range=(13, 14))
    register_event("graduate12th", dayEvents.graduate12th, age_range=(17, 18))
    register_event("extracurricular", extracurricular, age_range=(6, 18))
    register_event("learnInstrument", learnInstrument, age_range=(6, 18))
    register_event("braces", braces, age_range=(11, 16))
    register_event("glasses", glasses, age_range=(6, 30))
    register_event("actTest", actTest, age_range=(15, 18))
    register_event("actTestTake", actTestTake, age_range=(15, 18))
    register_event("satTest", satTest, age_range=(15, 18))

    # Quick wins education events (age 8-22)
    register_event("popQuiz", popQuiz, age_range=(10, 18))
    register_event("raisedHandNotCalled", raisedHandNotCalled, age_range=(8, 18))
    register_event("lostHomework", lostHomework, age_range=(8, 16))
    register_event("presentationNerves", presentationNerves, age_range=(10, 18))
    register_event("teacherFavorite", teacherFavorite, age_range=(8, 17))
    register_event("studyGroupInvite", studyGroupInvite, age_range=(14, 22))
    register_event("extracurricularBurnout", extracurricularBurnout, age_range=(13, 18))
    register_event("cafeteriaFoodPoisoning", cafeteriaFoodPoisoning, age_range=(8, 18))
    register_event("substituteTeacher", substituteTeacher, age_range=(8, 18))
    register_event("collegeAllNighter", collegeAllNighter, age_range=(18, 22))

    # Negative events - Academic challenges (age 10-22)
    register_event("failedTest", failedTest, age_range=(10, 22))
    register_event("rejectedFromCollege", rejectedFromCollege, age_range=(17, 18))
    register_event("academicProbation", academicProbation, age_range=(18, 22))
    register_event("groupProjectBetrayal", groupProjectBetrayal, age_range=(14, 22))
    register_event("plagiarismAccusation", plagiarismAccusation, age_range=(14, 22))

    # Negative events - Financial problems
    register_event("carBreakdown", carBreakdown, age_range=(16, 100))
    register_event("scammed", scammed, age_range=(18, 100))
    register_event("identityTheft", identityTheft, age_range=(18, 100))
    register_event("lostJob", lostJob, age_range=(18, 65), requires_job=True)
    register_event("rentalEviction", rentalEviction, age_range=(18, 100))
    register_event("taxAudit", taxAudit, age_range=(22, 100))
    register_event("investmentLoss", investmentLoss, age_range=(25, 100))

    # Puberty and teen events (age 10-18)
    register_event("puberty", dayEvents.puberty, age_range=(10, 16))
    register_event("startedPeriod", startedPeriod, age_range=(10, 16))
    register_event("firstCrush", firstCrush, age_range=(11, 18))
    register_event("firstKiss", firstKiss, age_range=(12, 22))
    register_event("driversLessons", dayEvents.driversLessons, age_range=(15, 17))
    register_event("driversTest", dayEvents.driversTest, age_range=(15, 18))

    # Adolescence life events (age 11-18)
    register_event("groupProjectDrama", groupProjectDrama, age_range=(12, 18))
    register_event("voiceCracking", voiceCracking, age_range=(12, 14))
    register_event("bodySelfConsciousness", bodySelfConsciousness, age_range=(11, 14))
    register_event("curfewArgument", curfewArgument, age_range=(14, 17))
    register_event("growthSpurt", growthSpurt, age_range=(12, 15))
    register_event("embarrassingSituation", embarrassingSituation, age_range=(13, 17))
    register_event("sleepover", sleepover, age_range=(12, 15))
    register_event("socialMediaPressure", socialMediaPressure, age_range=(11, 14))
    register_event("fashionExperimentation", fashionExperimentation, age_range=(13, 17))
    register_event("learningToDrive", learningToDrive, age_range=(15, 16))

    # College events (age 17-25)
    register_event("chooseCollege", chooseCollege, age_range=(17, 18))
    register_event("chooseMajor", chooseMajor, age_range=(17, 22))
    register_event("college", dayEvents.college, age_range=(18, 25))
    register_event("collegeParty", dayEvents.collegeParty, age_range=(18, 25))
    register_event("collegeGreekLife", dayEvents.collegeGreekLife, age_range=(18, 22))
    register_event("collegeMissHome", dayEvents.collegeMissHome, age_range=(18, 22))
    register_event("collegeMinor", dayEvents.collegeMinor, age_range=(18, 22))
    register_event("collegeExtracurricular", collegeExtracurricular, age_range=(18, 25))

    # School year events (ages 10-22)
    register_event("summerReading", summerReading, age_range=(10, 17))
    register_event("classRankReveal", classRankReveal, age_range=(16, 17))
    register_event("seniorSurvey", seniorSurvey, age_range=(17, 18))
    register_event("finalExamWeek", finalExamWeek, age_range=(14, 22))
    register_event("summerJobSearch", summerJobSearch, age_range=(15, 21))
    register_event("promInvite", promInvite, age_range=(16, 18))
    register_event("dormRoommate", dormRoommate, age_range=(18, 18))
    register_event("seniorSkipDay", seniorSkipDay, age_range=(17, 18))
    register_event("collegeHomesick", collegeHomesick, age_range=(18, 18))
    register_event("changeMyMajor", changeMyMajor, age_range=(18, 20))

    # Employment events (age 16+)
    register_event("firstJob", firstJob, age_range=(16, 25))
    register_event("jobApplication", jobApplication, age_range=(16, 65))
    register_event("employeeOfTheMonth", employeeOfTheMonth, age_range=(16, 65), requires_job=True)

    # Relationship events (age 13+)
    register_event("playDate", playDate, age_range=(3, 12), requires_relationship=True)
    register_event("newFriend", newFriend, age_range=(5, 80))
    register_event("lowAffinity", lowAffinity, age_range=(5, 100), requires_relationship=True)
    register_event("dating_choice", dating_choice, age_range=(16, 40), requires_relationship=True)
    register_event("romanticDate", romanticDate, age_range=(16, 80), requires_relationship=True)
    register_event("marriage", marriage, age_range=(18, 60), requires_relationship=True)
    register_event("wedding", wedding, age_range=(18, 60), requires_relationship=True)
    register_event("positiveInteraction", dayEvents.positiveInteraction, age_range=(0, 100), requires_relationship=True)

    # Family events (age 18+)
    register_event("haveChild", haveChild, age_range=(18, 50), requires_relationship=True)
    register_event("pregnant", pregnant, age_range=(18, 50), requires_relationship=True)
    register_event("childBorn", childBorn, age_range=(18, 50), requires_relationship=True)
    register_event("childLearnedWalk", childLearnedWalk, age_range=(18, 80), requires_relationship=True)
    register_event("extendedFamily", dayEvents.extendedFamily, age_range=(0, 100), requires_relationship=True)

    # Adult events (age 18+)
    register_event("adultMissFriends", dayEvents.adultMissFriends, age_range=(18, 40))
    register_event("openbankAccount", openbankAccount, age_range=(16, 25))

    # Adulthood life events (age 18+)
    register_event("firstApartment", firstApartment, age_range=(18, 25))
    register_event("workLifeBalance", workLifeBalance, age_range=(25, 50), requires_job=True)
    register_event("forgotBirthdayCall", forgotBirthdayCall, age_range=(22, 65))
    register_event("friendsDrifting", friendsDrifting, age_range=(25, 40))
    register_event("unexpectedBill", unexpectedBill, age_range=(20, 65))
    register_event("promotionOpportunity", promotionOpportunity, age_range=(25, 55), requires_job=True)
    register_event("agingParent", agingParent, age_range=(35, 60), requires_relationship=True)
    register_event("careerChangeDesire", careerChangeDesire, age_range=(30, 50), requires_job=True)
    register_event("coworkerRivalry", coworkerRivalry, age_range=(25, 60), requires_job=True)
    register_event("divorceConsideration", divorceConsideration, age_range=(25, 65), requires_relationship=True)

    # Health and life events (any age)
    register_event("minorInjury", minorInjury, age_range=(3, 100))
    register_event("minorSickness", minorSickness, age_range=(0, 100))
    register_event("breakArm", breakArm, age_range=(5, 80))
    register_event("carCrash", carCrash, age_range=(16, 100))
    register_event("healthCondition", healthCondition, age_range=(0, 100))
    register_event("lowEnergyEvent", lowEnergyEvent, age_range=(5, 100))
    register_event("lowEnergyEvents", dayEvents.lowEnergyEvents, age_range=(5, 100))
    register_event("negativeHabitEvent", negativeHabitEvent, age_range=(10, 100))
    register_event("annualCheckup", annualCheckup, age_range=(18, 100))
    register_event("allergySymptoms", allergySymptoms, age_range=(10, 100))
    register_event("dentalCavity", dentalCavity, age_range=(8, 100))
    register_event("mentalHealthDay", mentalHealthDay, age_range=(16, 65))
    register_event("sprainedAnkle", sprainedAnkle, age_range=(10, 50))
    register_event("eyeStrain", eyeStrain, age_range=(10, 100))
    register_event("backPain", backPain, age_range=(30, 100))
    register_event("firstGrayHair", firstGrayHair, age_range=(28, 45))

    # New positive random events
    register_event("foundMoneyStreet", foundMoneyStreet, age_range=(8, 100))
    register_event("freeUpgrade", freeUpgrade, age_range=(16, 100))
    register_event("unexpectedCompliment", unexpectedCompliment, age_range=(10, 100))
    register_event("perfectParkingSpot", perfectParkingSpot, age_range=(16, 100))
    register_event("rainbowSighting", rainbowSighting, age_range=(3, 100))

    # New negative random events
    register_event("spilledDrink", spilledDrink, age_range=(8, 100))
    register_event("phoneDropped", phoneDropped, age_range=(12, 100))
    register_event("birdPooped", birdPooped, age_range=(5, 100))
    register_event("forgotWallet", forgotWallet, age_range=(16, 100))
    register_event("missedBus", missedBus, age_range=(10, 100))
    register_event("badHairDay", badHairDay, age_range=(12, 40))
    register_event("caughtInRain", caughtInRain, age_range=(5, 100))
    register_event("lostKeys", lostKeys, age_range=(12, 100))
    register_event("ruinedClothes", ruinedClothes, age_range=(10, 100))
    register_event("badRestaurantExperience", badRestaurantExperience, age_range=(16, 100))
    register_event("sleepThroughAlarm", sleepThroughAlarm, age_range=(12, 100))
    register_event("packageStolen", packageStolen, age_range=(18, 100))

    # Technology & Modern Problems
    register_event("phoneBreakdown", phoneBreakdown, age_range=(12, 100))
    register_event("dataLoss", dataLoss, age_range=(16, 100))
    register_event("socialMediaCanceled", socialMediaCanceled, age_range=(16, 40))
    register_event("cyberbullying", cyberbullying, age_range=(10, 25))
    register_event("accountHacked", accountHacked, age_range=(14, 100))

    register_event("sleepDisorder", sleepDisorder, age_range=(18, 100))
    register_event("foodPoisoning", foodPoisoning, age_range=(10, 100))
    register_event("murderAttempt", dayEvents.murderAttempt, age_range=(10, 100), requires_relationship=True)
    register_event("funeral", dayEvents.funeral, age_range=(5, 100), requires_relationship=True)

    # Random events (any age)
    register_event("foundAPenny", foundAPenny, age_range=(5, 100))
    register_event("freeConcert", freeConcert, age_range=(13, 80))
    register_event("vendingMachine", vendingMachine, age_range=(10, 100))
    register_event("vacation", dayEvents.vacation, age_range=(0, 100))

    # New positive random events
    register_event("foundMoneyStreet", foundMoneyStreet, age_range=(8, 100))
    register_event("freeUpgrade", freeUpgrade, age_range=(16, 100))
    register_event("unexpectedCompliment", unexpectedCompliment, age_range=(10, 100))
    register_event("perfectParkingSpot", perfectParkingSpot, age_range=(16, 100))
    register_event("rainbowSighting", rainbowSighting, age_range=(3, 100))

    # New negative random events
    register_event("spilledDrink", spilledDrink, age_range=(8, 100))
    register_event("phoneDropped", phoneDropped, age_range=(12, 100))
    register_event("birdPooped", birdPooped, age_range=(5, 100))
    register_event("forgotWallet", forgotWallet, age_range=(16, 100))
    register_event("missedBus", missedBus, age_range=(10, 100))

    # Holiday events (day-specific, any age)
    register_event("birthday", dayEvents.birthday)
    register_event("newYear", dayEvents.newYear)
    register_event("christmas", dayEvents.christmas)
    register_event("thanksgiving", dayEvents.thanksgiving)
    register_event("blackfriday", dayEvents.blackfriday)
    register_event("independenceday", dayEvents.independenceday)

    # Dilemma events (age-specific)
    register_event("braceletDilemma", braceletDilemma, age_range=(6, 18))
    register_event("bullyDilemma", bullyDilemma, age_range=(6, 18), requires_relationship=True)
    register_event("foundLostPet", foundLostPet, age_range=(8, 100))
    register_event("friendCheating", friendCheating, age_range=(16, 100), requires_relationship=True)
    register_event("foundExpensiveItem", foundExpensiveItem, age_range=(10, 100))
    register_event("colleagueStealingCredit", colleagueStealingCredit, age_range=(22, 65), requires_job=True)
    register_event("strayAnimalDecision", strayAnimalDecision, age_range=(10, 100))
    register_event("witnessShoplifting", witnessShoplifting, age_range=(12, 100))
    register_event("friendBorrowMoney", friendBorrowMoney, age_range=(18, 100), requires_relationship=True)
    register_event("environmentalChoice", environmentalChoice, age_range=(16, 100))
    register_event("parentCareDecision", parentCareDecision, age_range=(40, 70))
    register_event("whistleblowerDecision", whistleblowerDecision, age_range=(25, 65), requires_job=True)

    # Conversation events (any age with relationships)
    register_event("conversationInit", conversationEvents.conversationInit, age_range=(5, 100), requires_relationship=True)

    # Tutorial events (age 0-5)
    register_event("firstConversation", tutorial_events.firstConversation, age_range=(0, 5))
    register_event("firstActivityChoice", tutorial_events.firstActivityChoice, age_range=(0, 5))
    register_event("tutorialComplete", tutorial_events.tutorialComplete, age_range=(0, 5))

    # Physical activity events
    register_event("joinSoccerTeam", joinSoccerTeam, age_range=(6, 18))
    register_event("learnMartialArts", learnMartialArts, age_range=(6, 40))
    register_event("runningHabit", runningHabit, age_range=(12, 70))
    register_event("joinGym", joinGym, age_range=(16, 100))
    register_event("yogaClass", yogaClass, age_range=(14, 100))

    # Social activity events
    register_event("joinClub", joinClub, age_range=(12, 100))
    register_event("volunteerWork", volunteerWork, age_range=(14, 100))
    register_event("bookClub", bookClub, age_range=(16, 100))
    register_event("gamingGroup", gamingGroup, age_range=(10, 100))
    register_event("communityEvent", communityEvent, age_range=(8, 100))

    # Learning & Educational activity events
    register_event("onlineCourse", onlineCourse, age_range=(16, 100))
    register_event("learnLanguage", learnLanguage, age_range=(10, 100))
    register_event("codingBootcamp", codingBootcamp, age_range=(16, 50))
    register_event("musicLessons", musicLessons, age_range=(6, 100))
    register_event("cookingClasses", cookingClasses, age_range=(12, 100))

    # Career & Work activity events
    register_event("professionalConference", professionalConference, age_range=(22, 65), requires_job=True)
    register_event("mentorJunior", mentorJunior, age_range=(30, 65), requires_job=True)
    register_event("sideHustle", sideHustle, age_range=(18, 65))
    register_event("networkingEvent", networkingEvent, age_range=(22, 65), requires_job=True)
    register_event("professionalCertification", professionalCertification, age_range=(22, 65), requires_job=True)

    # Creative & Artistic activity events
    register_event("learnPainting", learnPainting, age_range=(8, 100))
    register_event("writingJournal", writingJournal, age_range=(10, 100))
    register_event("learnPhotography", learnPhotography, age_range=(14, 100))
    register_event("theatreAudition", theatreAudition, age_range=(10, 22))
    register_event("craftingHobby", craftingHobby, age_range=(8, 100))

    # Seasonal & Outdoor activity events
    register_event("campingTrip", campingTrip, age_range=(8, 70))
    register_event("skiingVacation", skiingVacation, age_range=(10, 60))
    register_event("beachDay", beachDay, age_range=(5, 100))
    register_event("hikingAdventure", hikingAdventure, age_range=(10, 70))
    register_event("autumnActivities", autumnActivities, age_range=(5, 100))

    # Hobbies & Personal Development activity events
    register_event("gardening", gardening, age_range=(20, 100))
    register_event("meditation", meditation, age_range=(14, 100))
    register_event("birdWatching", birdWatching, age_range=(30, 100))
    register_event("collectionHobby", collectionHobby, age_range=(8, 100))
    register_event("readingChallenge", readingChallenge, age_range=(10, 100))

    # Test events (for development)
    register_event("oneTimeEventTest", oneTimeEventTest)

    # Family activity events (age 5-100)
    register_event("familyGameNight", familyGameNight, age_range=(8, 100), requires_relationship=True)
    register_event("familyVacation", familyVacation, age_range=(8, 65), requires_relationship=True)
    register_event("teachSiblingSkill", teachSiblingSkill, age_range=(10, 30), requires_relationship=True)
    register_event("helpParentProject", helpParentProject, age_range=(10, 45), requires_relationship=True)
    register_event("familyPhoto", familyPhoto, age_range=(5, 100), requires_relationship=True)

    # Family Conflict Events (negative events)
    register_event("parentDivorce", parentDivorce, age_range=(5, 18))
    register_event("siblingRivalry", siblingRivalry, age_range=(5, 25), requires_relationship=True)
    register_event("familyEstrangement", familyEstrangement, age_range=(18, 100))
    register_event("parentIllness", parentIllness, age_range=(20, 100), requires_relationship=True)
    register_event("familyDebt", familyDebt, age_range=(18, 100))
    register_event("inheritanceDispute", inheritanceDispute, age_range=(30, 100))

    # Career Setback Events (negative events)
    register_event("passedOverPromotion", passedOverPromotion, age_range=(25, 65), requires_job=True)
    register_event("workplaceBullying", workplaceBullying, age_range=(18, 65), requires_job=True)
    register_event("projectFailure", projectFailure, age_range=(22, 65), requires_job=True)
    register_event("badPerformanceReview", badPerformanceReview, age_range=(22, 65), requires_job=True)
    register_event("businessFailure", businessFailure, age_range=(25, 65), requires_job=True)

    # Health & Wellness Issue Events (negative events)
    register_event("injuryFromAccident", injuryFromAccident, age_range=(5, 100))
    register_event("chronicPain", chronicPain, age_range=(25, 100))
    register_event("dentalEmergency", dentalEmergency, age_range=(10, 100))
    register_event("seriousIllness", seriousIllness, age_range=(20, 100))
    register_event("weightGain", weightGain, age_range=(16, 100))
    register_event("sleepDeprivation", sleepDeprivation, age_range=(14, 100))
    register_event("addictionProblem", addictionProblem, age_range=(16, 100))

    # Social & Relationship Problem Events (negative events)
    register_event("publicEmbarrassment", publicEmbarrassment, age_range=(10, 30))
    register_event("friendshipBetrayal", friendshipBetrayal, age_range=(10, 100))
    register_event("romanticRejection", romanticRejection, age_range=(12, 30))
    register_event("breakup", breakup, age_range=(14, 100))
    register_event("socialMediaDrama", socialMediaDrama, age_range=(13, 30))
    register_event("leftOutOfGroup", leftOutOfGroup, age_range=(10, 25))
    register_event("argumentWithFriend", argumentWithFriend, age_range=(8, 100))
    register_event("partyDisaster", partyDisaster, age_range=(16, 30))

    # Major Life Crisis Events (negative events)
    register_event("houseFireDamage", houseFireDamage, age_range=(18, 100))
    register_event("legalTrouble", legalTrouble, age_range=(16, 100))
    register_event("victimOfCrime", victimOfCrime, age_range=(14, 100))
    register_event("majorAccident", majorAccident, age_range=(16, 100))
    register_event("naturalDisaster", naturalDisaster, age_range=(1, 100))

    logger.info(f"Registered {event_count()} game events in event registry")
    print(f"Registered {event_count()} game events in event registry")
