### transfer_mysql_to_mongodb.py
from django.core.management.base import BaseCommand
from django.conf import settings
import pymongo
import time
import os
from dotenv import load_dotenv
load_dotenv()

class Command(BaseCommand):
    help = 'Transfer data from MySQL to MongoDB'

    def handle(self, *args, **options):
        #Start time
        start_time = time.time()
        
        # Get MongoDB configuration from settings.py
        mongo_settings = settings.DATABASES['mongodb']

        # Configure MongoDB connection using settings
        mongo_client = pymongo.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'],
        )

        mongo_db = mongo_client[mongo_settings['NAME']]  # Use the database name from settings

            
        try:
                    self.stdout.write(self.style.NOTICE('Embedding data from MongoDB to Pinecone'))
                    from v1.utils import embedding_pinecone_from_mongodb, semantic_search
                    ATLAS_CONNECTION_STRING = os.getenv("ATLAS_CONNECTION_STRING")
                    OPENAI_API_KEY= os.getenv("OPENAI_API_KEY")
                    PINECONE_API_KEY= os.getenv("PINECONE_API_KEY")
                    
                    db = "remax_portal"
                    collection_name = "v1_properties_nested"
                    pinecone_index = "portalremax"
                    pinecone_namespace = "v1_properties_nested"
                    field_names = ['property_id', 'title', 'transaction_type', 'detail_view_url', 'description', 'list_price', 'list_price_currency', 'rental_price', 'rental_price_currency', 'rental_price_period', 'living_area', 'living_area_unit', 'year_built', 'bedrooms', 'bathrooms', 'garage', 'garage_type', 'unit_floor', 'unit_number', 'type', 'usage', 'location', 'features']
                    embedding_pinecone_from_mongodb(pinecone_index=pinecone_index, database=db, collection=collection_name, namespace=pinecone_namespace, field_names=field_names)

                    self.stdout.write(self.style.SUCCESS(f'Embedding data from MongoDB to Pinecone completed successfully!'))
                    
                    self.stdout.write(self.style.NOTICE('Testing semantic search...'))
                    query = "Encontre uma casa com Piscina e Churrasqueira"
                    output = semantic_search(pinecone_index=pinecone_index, namespace=pinecone_namespace, query=query, k=5)
                
        except Exception as e:
            self.stdout.write(self.style.ERROR(f'An error occurred: {str(e)}'))



        finally:
            # Close database connections
            mongo_client.close()
            total_time = round((time.time() - start_time),2)
            self.stdout.write(self.style.SUCCESS(
                    f'Total Time: {total_time}'
                    )
                )