from pymongo import MongoClient
from django.conf import settings
#from rest_framework import viewsets
#from .models import MongoDBModel
#from .serializers import MongoDBModelSerializer
#from rest_framework import serializers

# class PropertyFilter(django_filters.FilterSet):
#     list_price= django_filters.RangeFilter(
#         field_name='list_price',

#     )
#     living_area= django_filters.RangeFilter(
#         field_name='living_area',
   
#     )
#     publish_date= django_filters.DateFilter(
#         field_name='publish_date',

   
#     )
#     sync_date= django_filters.DateFilter(
#             field_name='sync_date',

 
#     )
    
    
#     class Meta:
#         model = Properties
#         fields = {
#             'listing_id': ['in', 'exact'],
#             'title': ['icontains'],
#             'transaction_type': ['icontains'],
#             'detail_view_url': ['icontains'],
#             'description': ['icontains'],
#             'list_price': ['range','exact'],
#             'list_price_currency': ['exact'],
#             'rental_price' : ['range','exact'],
#             'rental_price_currency': ['exact'],
#             'rental_price_period': ['icontains'],
#             'property_administration_fee' : ['range','exact'],
#             'property_administration_fee_period': ['icontains'],
#             'yearly_tax': ['range', 'exact'],
#             'yearly_tax_currency': ['exact'],
#             'living_area': ['range', 'exact'],
#             'living_area_unit': ['exact'],
#             'year_built' : ['in', 'exact'],
#             'bedrooms': ['in', 'exact', 'range','gte'],
#             'bathrooms': ['in','exact', 'range','gte'],
#             'garage': ['in', 'exact', 'range', 'gte'],
#             'garage_type': ['exact'],
#             'unit_floor': ['in', 'exact', 'range'],
#             'unit_number': ['in', 'exact'],
#             'publish_date': ['exact', 'range', 'icontains'],
#             'sync_date': ['exact', 'range'],
#             'region_id': ['in', 'exact'],
#             'office__office_id': ['in', 'exact'],
#             'office__name': ['in', 'exact','icontains'],
#             'office__website': ['icontains'],
#             'office__logo': ['icontains'],
#             'office__telephone': ['icontains'],
#             'office__country': ['icontains'],
#             'office__country_abbreviation': ['exact'],
#             'office__state': ['icontains'],
#             'office__state_abbreviation': ['exact'],
#             'office__city': ['icontains'],
#             'office__zone': ['icontains'],
#             'office__neighborhood': ['icontains'],
#             'office__complement': ['icontains'],
#             'office__address': ['icontains'],
#             'office__street_number': ['exact'],
#             'office__postal_code': ['exact'],
#             'office__total_properties': ['in', 'exact', 'range'],
#             'agent__agent_id': ['exact'],
#             'agent__name': ['exact', 'icontains'],
#             'agent__agent_id': ['exact'],
#             'agent__name': ['exact', 'icontains'],
#             'agent__email': ['icontains'],
#             'agent__total_properties':['in', 'exact', 'range'],
#             'agent__agent_id': ['exact'],
#             'agent__name': ['exact', 'icontains'],
#             'usage__usage_id': ['exact'],
#             'usage__usage_name_en': ['exact', 'icontains'],
#             'usage__usage_name_pt': ['exact', 'icontains'],
#             'type__type_id': ['exact'],
#             'type__type_name_en': ['exact', 'icontains'],
#             'type__type_name_pt': ['exact', 'icontains'],
#             'location__property_location_id': ['in', 'exact'],
#             'location__display_address': ['icontains'],
#             'location__country': ['in', 'exact','icontains'],
#             'location__country_abbreviation': ['in','icontains'],
#             'location__state': ['in', 'icontains'],
#             'location__zone': ['in', 'icontains'],
#             'location__neighborhood': ['in', 'icontains'],
#             'location__complement': ['icontains'],
#             'location__address': ['in', 'icontains'],
#             'location__street_number': ['icontains'],
#             'location__postal_code': ['icontains'],
#             'medias__url': ['icontains'],
#             'features__feature__feature_name_en': ['in', 'icontains'],
#             'features__feature__feature_name_pt': ['in', 'icontains'],
#         }

class MongoDBModel:
    def __init__(self, collection_name):
        #mongodb_settings = settings.DATABASES['mongodb']
        #connection_string = mongodb_settings['HOST']
        #database_name = mongodb_settings['NAME']
        #username = mongodb_settings['USERNAME']
        #password = mongodb_settings['PASSWORD']
        
        # Configure MongoDB connection using settings
        mongo_settings = settings.DATABASES['mongodb']
        mongo_client = MongoClient(
            host=mongo_settings['CLIENT']['host'],
            port=mongo_settings['CLIENT']['port'],
            username=mongo_settings['CLIENT']['username'],
            password=mongo_settings['CLIENT']['password'],
            authSource=mongo_settings['CLIENT']['authSource'],
            authMechanism=mongo_settings['CLIENT']['authMechanism'],
        )

        self.db = mongo_client[mongo_settings['NAME']]  # Use the database name from settings

        #self.client = MongoClient(connection_string, username=username, password=password)
        #self.db = self.client[database_name]
        self.collection = self.db[collection_name]

    def get_data(self):
        # Implement your logic to retrieve data from MongoDB
        data = self.collection.find()
        return data
    

# class MongoDBModelSerializer(serializers.Serializer):
#     # Define your serializer fields here
#     # You can include fields from the MongoDBModel class or customize them as needed
#     field1 = serializers.CharField()
#     field2 = serializers.IntegerField()
#     # Add more fields as necessary

#     def create(self, validated_data):
#         # Implement your logic to create a new MongoDBModel instance
#         pass

#     def update(self, instance, validated_data):
#         # Implement your logic to update an existing MongoDBModel instance
#         pass
    
# class MongoDBModelViewSet(viewsets.ReadOnlyModelViewSet):
#     queryset = MongoDBModel().get_data()
#     serializer_class = MongoDBModelSerializer
