""" Statistics serializers for ThrillWiki API. Provides serialization for platform statistics data. """ from rest_framework import serializers class StatsSerializer(serializers.Serializer): """ Serializer for platform statistics response. This serializer defines the structure of the statistics API response, including all the various counts and breakdowns available. """ # Core entity counts total_parks = serializers.IntegerField( help_text="Total number of parks in the database" ) total_rides = serializers.IntegerField( help_text="Total number of rides in the database" ) total_manufacturers = serializers.IntegerField( help_text="Total number of ride manufacturers" ) total_operators = serializers.IntegerField( help_text="Total number of park operators" ) total_designers = serializers.IntegerField( help_text="Total number of ride designers" ) total_property_owners = serializers.IntegerField( help_text="Total number of property owners" ) total_roller_coasters = serializers.IntegerField( help_text="Total number of roller coasters with detailed stats" ) # Photo counts total_photos = serializers.IntegerField( help_text="Total number of photos (parks + rides combined)" ) total_park_photos = serializers.IntegerField( help_text="Total number of park photos" ) total_ride_photos = serializers.IntegerField( help_text="Total number of ride photos" ) # Review counts total_reviews = serializers.IntegerField( help_text="Total number of reviews (parks + rides)" ) total_park_reviews = serializers.IntegerField( help_text="Total number of park reviews" ) total_ride_reviews = serializers.IntegerField( help_text="Total number of ride reviews" ) # Ride category counts (optional fields since they depend on data) roller_coasters = serializers.IntegerField( required=False, help_text="Number of rides categorized as roller coasters" ) dark_rides = serializers.IntegerField( required=False, help_text="Number of rides categorized as dark rides" ) flat_rides = serializers.IntegerField( required=False, help_text="Number of rides categorized as flat rides" ) water_rides = serializers.IntegerField( required=False, help_text="Number of rides categorized as water rides" ) transport_rides = serializers.IntegerField( required=False, help_text="Number of rides categorized as transport rides" ) other_rides = serializers.IntegerField( required=False, help_text="Number of rides categorized as other" ) # Park status counts (optional fields since they depend on data) operating_parks = serializers.IntegerField( required=False, help_text="Number of currently operating parks" ) temporarily_closed_parks = serializers.IntegerField( required=False, help_text="Number of temporarily closed parks" ) permanently_closed_parks = serializers.IntegerField( required=False, help_text="Number of permanently closed parks" ) under_construction_parks = serializers.IntegerField( required=False, help_text="Number of parks under construction" ) demolished_parks = serializers.IntegerField( required=False, help_text="Number of demolished parks" ) relocated_parks = serializers.IntegerField( required=False, help_text="Number of relocated parks" ) # Ride status counts (optional fields since they depend on data) operating_rides = serializers.IntegerField( required=False, help_text="Number of currently operating rides" ) temporarily_closed_rides = serializers.IntegerField( required=False, help_text="Number of temporarily closed rides" ) sbno_rides = serializers.IntegerField( required=False, help_text="Number of rides standing but not operating" ) closing_rides = serializers.IntegerField( required=False, help_text="Number of rides in the process of closing" ) permanently_closed_rides = serializers.IntegerField( required=False, help_text="Number of permanently closed rides" ) under_construction_rides = serializers.IntegerField( required=False, help_text="Number of rides under construction" ) demolished_rides = serializers.IntegerField( required=False, help_text="Number of demolished rides" ) relocated_rides = serializers.IntegerField( required=False, help_text="Number of relocated rides" ) # Metadata last_updated = serializers.CharField( help_text="ISO timestamp when these statistics were last calculated" ) relative_last_updated = serializers.CharField( help_text="Human-readable relative time since last update (e.g., '2 minutes ago')" )