from rest_framework import serializers from drf_spectacular.utils import extend_schema_field from apps.profiles.models.institution import Institution class MapInstitutionMarkerSerializer(serializers.ModelSerializer): type_display = serializers.CharField(source='get_type_display', read_only=True) lat = serializers.FloatField(source='latitude', read_only=True) lng = serializers.FloatField(source='longitude', read_only=True) class Meta: model = Institution fields = [ 'id', 'name', 'slug', 'type', 'type_display', 'lat', 'lng', 'city', 'country', 'avatar', 'cover_image', 'verification_status', 'is_featured', 'follower_count', ] read_only_fields = fields class MapClusterItemSerializer(serializers.Serializer): is_cluster = serializers.BooleanField() # Fields when is_cluster=False id = serializers.IntegerField(required=False, allow_null=True) name = serializers.CharField(required=False, allow_null=True) slug = serializers.CharField(required=False, allow_null=True) type = serializers.CharField(required=False, allow_null=True) type_display = serializers.CharField(required=False, allow_null=True) city = serializers.CharField(required=False, allow_null=True) country = serializers.CharField(required=False, allow_null=True) avatar = serializers.CharField(required=False, allow_null=True) cover_image = serializers.CharField(required=False, allow_null=True) is_featured = serializers.BooleanField(required=False) verification_status = serializers.CharField(required=False, allow_null=True) follower_count = serializers.IntegerField(required=False) # Fields when is_cluster=True cluster_id = serializers.CharField(required=False) count = serializers.IntegerField(required=False) lat = serializers.FloatField() lng = serializers.FloatField() type_breakdown = serializers.DictField(required=False) preview_institutions = serializers.ListField(required=False) class RegionalDensitySerializer(serializers.Serializer): country = serializers.CharField() total_institutions = serializers.IntegerField() mosques_count = serializers.IntegerField() hussainiyas_count = serializers.IntegerField() cultural_centers_count = serializers.IntegerField() libraries_count = serializers.IntegerField() institutes_count = serializers.IntegerField() charities_count = serializers.IntegerField() total_followers = serializers.IntegerField() center_lat = serializers.FloatField(allow_null=True) center_lng = serializers.FloatField(allow_null=True) class MapStatsSerializer(serializers.Serializer): total_institutions = serializers.IntegerField() total_countries = serializers.IntegerField() total_cities = serializers.IntegerField() type_distribution = serializers.DictField() verified_count = serializers.IntegerField() featured_count = serializers.IntegerField()