""" Rich Choice Objects for Rides Domain This module defines all choice objects for the rides domain, replacing the legacy tuple-based choices with rich choice objects. """ from apps.core.choices import RichChoice, ChoiceCategory from apps.core.choices.registry import register_choices # Ride Category Choices RIDE_CATEGORIES = [ RichChoice( value="RC", label="Roller Coaster", description="Thrill rides with tracks featuring hills, loops, and high speeds", metadata={ 'color': 'red', 'icon': 'roller-coaster', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 1 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="DR", label="Dark Ride", description="Indoor rides with themed environments and storytelling", metadata={ 'color': 'purple', 'icon': 'dark-ride', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 2 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="FR", label="Flat Ride", description="Rides that move along a generally flat plane with spinning, swinging, or bouncing motions", metadata={ 'color': 'blue', 'icon': 'flat-ride', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 3 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="WR", label="Water Ride", description="Rides that incorporate water elements like splashing, floating, or getting wet", metadata={ 'color': 'cyan', 'icon': 'water-ride', 'css_class': 'bg-cyan-100 text-cyan-800', 'sort_order': 4 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="TR", label="Transport Ride", description="Rides primarily designed for transportation around the park", metadata={ 'color': 'green', 'icon': 'transport', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 5 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="OT", label="Other", description="Rides that don't fit into standard categories", metadata={ 'color': 'gray', 'icon': 'other', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 6 }, category=ChoiceCategory.CLASSIFICATION ), ] # Ride Status Choices RIDE_STATUSES = [ RichChoice( value="OPERATING", label="Operating", description="Ride is currently open and operating normally", metadata={ 'color': 'green', 'icon': 'check-circle', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 1 }, category=ChoiceCategory.STATUS ), RichChoice( value="CLOSED_TEMP", label="Temporarily Closed", description="Ride is temporarily closed for maintenance, weather, or other short-term reasons", metadata={ 'color': 'yellow', 'icon': 'pause-circle', 'css_class': 'bg-yellow-100 text-yellow-800', 'sort_order': 2 }, category=ChoiceCategory.STATUS ), RichChoice( value="SBNO", label="Standing But Not Operating", description="Ride structure remains but is not currently operating", metadata={ 'color': 'orange', 'icon': 'stop-circle', 'css_class': 'bg-orange-100 text-orange-800', 'sort_order': 3 }, category=ChoiceCategory.STATUS ), RichChoice( value="CLOSING", label="Closing", description="Ride is scheduled to close permanently", metadata={ 'color': 'red', 'icon': 'x-circle', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 4 }, category=ChoiceCategory.STATUS ), RichChoice( value="CLOSED_PERM", label="Permanently Closed", description="Ride has been permanently closed and will not reopen", metadata={ 'color': 'red', 'icon': 'x-circle', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 5 }, category=ChoiceCategory.STATUS ), RichChoice( value="UNDER_CONSTRUCTION", label="Under Construction", description="Ride is currently being built or undergoing major renovation", metadata={ 'color': 'blue', 'icon': 'tool', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 6 }, category=ChoiceCategory.STATUS ), RichChoice( value="DEMOLISHED", label="Demolished", description="Ride has been completely removed and demolished", metadata={ 'color': 'gray', 'icon': 'trash', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 7 }, category=ChoiceCategory.STATUS ), RichChoice( value="RELOCATED", label="Relocated", description="Ride has been moved to a different location", metadata={ 'color': 'purple', 'icon': 'arrow-right', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 8 }, category=ChoiceCategory.STATUS ), ] # Post-Closing Status Choices POST_CLOSING_STATUSES = [ RichChoice( value="SBNO", label="Standing But Not Operating", description="Ride structure remains but is not operating after closure", metadata={ 'color': 'orange', 'icon': 'stop-circle', 'css_class': 'bg-orange-100 text-orange-800', 'sort_order': 1 }, category=ChoiceCategory.STATUS ), RichChoice( value="CLOSED_PERM", label="Permanently Closed", description="Ride has been permanently closed after the closing date", metadata={ 'color': 'red', 'icon': 'x-circle', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 2 }, category=ChoiceCategory.STATUS ), ] # Roller Coaster Track Material Choices TRACK_MATERIALS = [ RichChoice( value="STEEL", label="Steel", description="Modern steel track construction providing smooth rides and complex layouts", metadata={ 'color': 'gray', 'icon': 'steel', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 1 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="WOOD", label="Wood", description="Traditional wooden track construction providing classic coaster experience", metadata={ 'color': 'amber', 'icon': 'wood', 'css_class': 'bg-amber-100 text-amber-800', 'sort_order': 2 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="HYBRID", label="Hybrid", description="Combination of steel and wooden construction elements", metadata={ 'color': 'orange', 'icon': 'hybrid', 'css_class': 'bg-orange-100 text-orange-800', 'sort_order': 3 }, category=ChoiceCategory.TECHNICAL ), ] # Roller Coaster Type Choices COASTER_TYPES = [ RichChoice( value="SITDOWN", label="Sit Down", description="Traditional seated roller coaster with riders sitting upright", metadata={ 'color': 'blue', 'icon': 'sitdown', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 1 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="INVERTED", label="Inverted", description="Coaster where riders' feet dangle freely below the track", metadata={ 'color': 'purple', 'icon': 'inverted', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 2 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="FLYING", label="Flying", description="Riders lie face-down in a flying position", metadata={ 'color': 'sky', 'icon': 'flying', 'css_class': 'bg-sky-100 text-sky-800', 'sort_order': 3 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="STANDUP", label="Stand Up", description="Riders stand upright during the ride", metadata={ 'color': 'green', 'icon': 'standup', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 4 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="WING", label="Wing", description="Riders sit on either side of the track with nothing above or below", metadata={ 'color': 'indigo', 'icon': 'wing', 'css_class': 'bg-indigo-100 text-indigo-800', 'sort_order': 5 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="DIVE", label="Dive", description="Features a vertical or near-vertical drop as the main element", metadata={ 'color': 'red', 'icon': 'dive', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 6 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="FAMILY", label="Family", description="Designed for riders of all ages with moderate thrills", metadata={ 'color': 'emerald', 'icon': 'family', 'css_class': 'bg-emerald-100 text-emerald-800', 'sort_order': 7 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="WILD_MOUSE", label="Wild Mouse", description="Compact coaster with sharp turns and sudden drops", metadata={ 'color': 'yellow', 'icon': 'mouse', 'css_class': 'bg-yellow-100 text-yellow-800', 'sort_order': 8 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="SPINNING", label="Spinning", description="Cars rotate freely during the ride", metadata={ 'color': 'pink', 'icon': 'spinning', 'css_class': 'bg-pink-100 text-pink-800', 'sort_order': 9 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="FOURTH_DIMENSION", label="4th Dimension", description="Seats rotate independently of the track direction", metadata={ 'color': 'violet', 'icon': '4d', 'css_class': 'bg-violet-100 text-violet-800', 'sort_order': 10 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="OTHER", label="Other", description="Coaster type that doesn't fit standard classifications", metadata={ 'color': 'gray', 'icon': 'other', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 11 }, category=ChoiceCategory.CLASSIFICATION ), ] # Propulsion System Choices PROPULSION_SYSTEMS = [ RichChoice( value="CHAIN", label="Chain Lift", description="Traditional chain lift system to pull trains up the lift hill", metadata={ 'color': 'gray', 'icon': 'chain', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 1 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="LSM", label="LSM Launch", description="Linear Synchronous Motor launch system using magnetic propulsion", metadata={ 'color': 'blue', 'icon': 'lightning', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 2 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="HYDRAULIC", label="Hydraulic Launch", description="High-pressure hydraulic launch system for rapid acceleration", metadata={ 'color': 'red', 'icon': 'hydraulic', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 3 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="GRAVITY", label="Gravity", description="Uses gravity and momentum without mechanical lift systems", metadata={ 'color': 'green', 'icon': 'gravity', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 4 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="OTHER", label="Other", description="Propulsion system that doesn't fit standard categories", metadata={ 'color': 'gray', 'icon': 'other', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 5 }, category=ChoiceCategory.TECHNICAL ), ] # Ride Model Target Market Choices TARGET_MARKETS = [ RichChoice( value="FAMILY", label="Family", description="Designed for families with children, moderate thrills", metadata={ 'color': 'green', 'icon': 'family', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 1 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="THRILL", label="Thrill", description="High-intensity rides for thrill seekers", metadata={ 'color': 'red', 'icon': 'thrill', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 2 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="EXTREME", label="Extreme", description="Maximum intensity rides for extreme thrill seekers", metadata={ 'color': 'purple', 'icon': 'extreme', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 3 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="KIDDIE", label="Kiddie", description="Gentle rides designed specifically for young children", metadata={ 'color': 'yellow', 'icon': 'kiddie', 'css_class': 'bg-yellow-100 text-yellow-800', 'sort_order': 4 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="ALL_AGES", label="All Ages", description="Suitable for riders of all ages and thrill preferences", metadata={ 'color': 'blue', 'icon': 'all-ages', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 5 }, category=ChoiceCategory.CLASSIFICATION ), ] # Ride Model Photo Type Choices PHOTO_TYPES = [ RichChoice( value="PROMOTIONAL", label="Promotional", description="Marketing and promotional photos of the ride model", metadata={ 'color': 'blue', 'icon': 'camera', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 1 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="TECHNICAL", label="Technical Drawing", description="Technical drawings and engineering diagrams", metadata={ 'color': 'gray', 'icon': 'blueprint', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 2 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="INSTALLATION", label="Installation Example", description="Photos of actual installations of this ride model", metadata={ 'color': 'green', 'icon': 'installation', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 3 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="RENDERING", label="3D Rendering", description="Computer-generated 3D renderings of the ride model", metadata={ 'color': 'purple', 'icon': 'cube', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 4 }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="CATALOG", label="Catalog Image", description="Official catalog and brochure images", metadata={ 'color': 'orange', 'icon': 'catalog', 'css_class': 'bg-orange-100 text-orange-800', 'sort_order': 5 }, category=ChoiceCategory.CLASSIFICATION ), ] # Technical Specification Category Choices SPEC_CATEGORIES = [ RichChoice( value="DIMENSIONS", label="Dimensions", description="Physical dimensions and measurements", metadata={ 'color': 'blue', 'icon': 'ruler', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 1 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="PERFORMANCE", label="Performance", description="Performance specifications and capabilities", metadata={ 'color': 'red', 'icon': 'speedometer', 'css_class': 'bg-red-100 text-red-800', 'sort_order': 2 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="CAPACITY", label="Capacity", description="Rider capacity and throughput specifications", metadata={ 'color': 'green', 'icon': 'users', 'css_class': 'bg-green-100 text-green-800', 'sort_order': 3 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="SAFETY", label="Safety Features", description="Safety systems and features", metadata={ 'color': 'yellow', 'icon': 'shield', 'css_class': 'bg-yellow-100 text-yellow-800', 'sort_order': 4 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="ELECTRICAL", label="Electrical Requirements", description="Power and electrical system requirements", metadata={ 'color': 'purple', 'icon': 'lightning', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 5 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="FOUNDATION", label="Foundation Requirements", description="Foundation and structural requirements", metadata={ 'color': 'gray', 'icon': 'foundation', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 6 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="MAINTENANCE", label="Maintenance", description="Maintenance requirements and procedures", metadata={ 'color': 'orange', 'icon': 'wrench', 'css_class': 'bg-orange-100 text-orange-800', 'sort_order': 7 }, category=ChoiceCategory.TECHNICAL ), RichChoice( value="OTHER", label="Other", description="Other technical specifications", metadata={ 'color': 'gray', 'icon': 'other', 'css_class': 'bg-gray-100 text-gray-800', 'sort_order': 8 }, category=ChoiceCategory.TECHNICAL ), ] # Company Role Choices for Rides Domain (MANUFACTURER and DESIGNER only) RIDES_COMPANY_ROLES = [ RichChoice( value="MANUFACTURER", label="Ride Manufacturer", description="Company that designs and builds ride hardware and systems", metadata={ 'color': 'blue', 'icon': 'factory', 'css_class': 'bg-blue-100 text-blue-800', 'sort_order': 1, 'domain': 'rides', 'permissions': ['manage_ride_models', 'view_manufacturing'], 'url_pattern': '/rides/manufacturers/{slug}/' }, category=ChoiceCategory.CLASSIFICATION ), RichChoice( value="DESIGNER", label="Ride Designer", description="Company that specializes in ride design, layout, and engineering", metadata={ 'color': 'purple', 'icon': 'design', 'css_class': 'bg-purple-100 text-purple-800', 'sort_order': 2, 'domain': 'rides', 'permissions': ['manage_ride_designs', 'view_design_specs'], 'url_pattern': '/rides/designers/{slug}/' }, category=ChoiceCategory.CLASSIFICATION ), ] def register_rides_choices(): """Register all rides domain choices with the global registry""" register_choices( name="categories", choices=RIDE_CATEGORIES, domain="rides", description="Ride category classifications", metadata={'domain': 'rides', 'type': 'category'} ) register_choices( name="statuses", choices=RIDE_STATUSES, domain="rides", description="Ride operational status options", metadata={'domain': 'rides', 'type': 'status'} ) register_choices( name="post_closing_statuses", choices=POST_CLOSING_STATUSES, domain="rides", description="Status options after ride closure", metadata={'domain': 'rides', 'type': 'post_closing_status'} ) register_choices( name="track_materials", choices=TRACK_MATERIALS, domain="rides", description="Roller coaster track material types", metadata={'domain': 'rides', 'type': 'track_material', 'applies_to': 'roller_coasters'} ) register_choices( name="coaster_types", choices=COASTER_TYPES, domain="rides", description="Roller coaster type classifications", metadata={'domain': 'rides', 'type': 'coaster_type', 'applies_to': 'roller_coasters'} ) register_choices( name="propulsion_systems", choices=PROPULSION_SYSTEMS, domain="rides", description="Roller coaster propulsion and lift systems", metadata={'domain': 'rides', 'type': 'propulsion_system', 'applies_to': 'roller_coasters'} ) register_choices( name="target_markets", choices=TARGET_MARKETS, domain="rides", description="Target market classifications for ride models", metadata={'domain': 'rides', 'type': 'target_market', 'applies_to': 'ride_models'} ) register_choices( name="photo_types", choices=PHOTO_TYPES, domain="rides", description="Photo type classifications for ride model images", metadata={'domain': 'rides', 'type': 'photo_type', 'applies_to': 'ride_model_photos'} ) register_choices( name="spec_categories", choices=SPEC_CATEGORIES, domain="rides", description="Technical specification category classifications", metadata={'domain': 'rides', 'type': 'spec_category', 'applies_to': 'ride_model_specs'} ) register_choices( name="company_roles", choices=RIDES_COMPANY_ROLES, domain="rides", description="Company role classifications for rides domain (MANUFACTURER and DESIGNER only)", metadata={'domain': 'rides', 'type': 'company_role'} ) # Auto-register choices when module is imported register_rides_choices()