""" Rich Choice Objects for Parks Domain This module defines all choice objects for the parks domain, replacing the legacy tuple-based choices with rich choice objects. """ from apps.core.choices import ChoiceCategory, RichChoice from apps.core.choices.registry import register_choices # Park Status Choices PARK_STATUSES = [ RichChoice( value="OPERATING", label="Operating", description="Park is currently open and operating normally", metadata={ "color": "green", "icon": "check-circle", "css_class": "bg-green-100 text-green-800", "sort_order": 1, "can_transition_to": [ "CLOSED_TEMP", "CLOSED_PERM", ], "requires_moderator": False, "is_final": False, "is_initial": True, }, category=ChoiceCategory.STATUS, ), RichChoice( value="CLOSED_TEMP", label="Temporarily Closed", description="Park is temporarily closed for maintenance, weather, or seasonal reasons", metadata={ "color": "yellow", "icon": "pause-circle", "css_class": "bg-yellow-100 text-yellow-800", "sort_order": 2, "can_transition_to": [ "CLOSED_PERM", ], "requires_moderator": False, "is_final": False, }, category=ChoiceCategory.STATUS, ), RichChoice( value="CLOSED_PERM", label="Permanently Closed", description="Park has been permanently closed and will not reopen", metadata={ "color": "red", "icon": "x-circle", "css_class": "bg-red-100 text-red-800", "sort_order": 3, "can_transition_to": [ "DEMOLISHED", "RELOCATED", ], "requires_moderator": True, "is_final": False, }, category=ChoiceCategory.STATUS, ), RichChoice( value="UNDER_CONSTRUCTION", label="Under Construction", description="Park is currently being built or undergoing major renovation", metadata={ "color": "blue", "icon": "tool", "css_class": "bg-blue-100 text-blue-800", "sort_order": 4, "can_transition_to": [ "OPERATING", ], "requires_moderator": False, "is_final": False, }, category=ChoiceCategory.STATUS, ), RichChoice( value="DEMOLISHED", label="Demolished", description="Park has been completely demolished and removed", metadata={ "color": "gray", "icon": "trash", "css_class": "bg-gray-100 text-gray-800", "sort_order": 5, "can_transition_to": [], "requires_moderator": True, "is_final": True, }, category=ChoiceCategory.STATUS, ), RichChoice( value="RELOCATED", label="Relocated", description="Park has been moved to a different location", metadata={ "color": "purple", "icon": "arrow-right", "css_class": "bg-purple-100 text-purple-800", "sort_order": 6, "can_transition_to": [], "requires_moderator": True, "is_final": True, }, category=ChoiceCategory.STATUS, ), ] # Park Type Choices PARK_TYPES = [ RichChoice( value="THEME_PARK", label="Theme Park", description="Large-scale amusement park with themed areas and attractions", metadata={"color": "red", "icon": "castle", "css_class": "bg-red-100 text-red-800", "sort_order": 1}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="AMUSEMENT_PARK", label="Amusement Park", description="Traditional amusement park with rides and games", metadata={"color": "blue", "icon": "ferris-wheel", "css_class": "bg-blue-100 text-blue-800", "sort_order": 2}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="WATER_PARK", label="Water Park", description="Park featuring water-based attractions and activities", metadata={"color": "cyan", "icon": "water", "css_class": "bg-cyan-100 text-cyan-800", "sort_order": 3}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="FAMILY_ENTERTAINMENT_CENTER", label="Family Entertainment Center", description="Indoor entertainment facility with games and family attractions", metadata={"color": "green", "icon": "family", "css_class": "bg-green-100 text-green-800", "sort_order": 4}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="CARNIVAL", label="Carnival", description="Traveling amusement show with rides, games, and entertainment", metadata={"color": "yellow", "icon": "carnival", "css_class": "bg-yellow-100 text-yellow-800", "sort_order": 5}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="FAIR", label="Fair", description="Temporary event featuring rides, games, and agricultural exhibits", metadata={"color": "orange", "icon": "fair", "css_class": "bg-orange-100 text-orange-800", "sort_order": 6}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="PIER", label="Pier", description="Seaside entertainment pier with rides and attractions", metadata={"color": "teal", "icon": "pier", "css_class": "bg-teal-100 text-teal-800", "sort_order": 7}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="BOARDWALK", label="Boardwalk", description="Waterfront entertainment area with rides and attractions", metadata={ "color": "indigo", "icon": "boardwalk", "css_class": "bg-indigo-100 text-indigo-800", "sort_order": 8, }, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="SAFARI_PARK", label="Safari Park", description="Wildlife park with drive-through animal experiences", metadata={ "color": "emerald", "icon": "safari", "css_class": "bg-emerald-100 text-emerald-800", "sort_order": 9, }, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="ZOO", label="Zoo", description="Zoological park with animal exhibits and educational programs", metadata={"color": "lime", "icon": "zoo", "css_class": "bg-lime-100 text-lime-800", "sort_order": 10}, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="OTHER", label="Other", description="Park type that doesn't fit into standard categories", metadata={"color": "gray", "icon": "other", "css_class": "bg-gray-100 text-gray-800", "sort_order": 11}, category=ChoiceCategory.CLASSIFICATION, ), ] # Company Role Choices for Parks Domain (OPERATOR and PROPERTY_OWNER only) PARKS_COMPANY_ROLES = [ RichChoice( value="OPERATOR", label="Park Operator", description="Company that operates and manages theme parks and amusement facilities", metadata={ "color": "blue", "icon": "building-office", "css_class": "bg-blue-100 text-blue-800", "sort_order": 1, "domain": "parks", "permissions": ["manage_parks", "view_operations"], "url_pattern": "/parks/operators/{slug}/", }, category=ChoiceCategory.CLASSIFICATION, ), RichChoice( value="PROPERTY_OWNER", label="Property Owner", description="Company that owns the land and property where parks are located", metadata={ "color": "green", "icon": "home", "css_class": "bg-green-100 text-green-800", "sort_order": 2, "domain": "parks", "permissions": ["manage_property", "view_ownership"], "url_pattern": "/parks/owners/{slug}/", }, category=ChoiceCategory.CLASSIFICATION, ), ] def register_parks_choices(): """Register all parks domain choices with the global registry""" register_choices( name="statuses", choices=PARK_STATUSES, domain="parks", description="Park operational status options", metadata={"domain": "parks", "type": "status"}, ) register_choices( name="types", choices=PARK_TYPES, domain="parks", description="Park type and category classifications", metadata={"domain": "parks", "type": "park_type"}, ) register_choices( name="company_roles", choices=PARKS_COMPANY_ROLES, domain="parks", description="Company role classifications for parks domain (OPERATOR and PROPERTY_OWNER only)", metadata={"domain": "parks", "type": "company_role"}, ) # Auto-register choices when module is imported register_parks_choices()