from django.core.management.base import BaseCommand
from django.conf import settings
import pymongo

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

    def handle(self, *args, **options):
        # 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

        # Use existing MySQL database configuration from settings.py
        mysql_settings = settings.DATABASES['default']
        
        # MySQL connection parameters
        mysql_host = mysql_settings['HOST']
        mysql_port = mysql_settings['PORT']
        mysql_user = mysql_settings['USER']
        mysql_password = mysql_settings['PASSWORD']
        mysql_database = mysql_settings['NAME']

        # Connect to MySQL using pymysql
        # Note: You can adjust the MySQL connection parameters based on your settings.py
        mysql_conn = pymysql.connect(
            host=mysql_host,
            port=mysql_port,
            user=mysql_user,
            password=mysql_password,
            db=mysql_database,
        )
        mysql_cursor = mysql_conn.cursor()

        try:
            # Fetch data from MySQL and insert into MongoDB (replace with your logic)
            # Example: mysql_cursor.execute("SELECT * FROM your_mysql_table")
            #          table_data = mysql_cursor.fetchall()
            #          mongo_collection = mongo_db['your_mongodb_collection']
            #          mongo_collection.insert_many(table_data)

            self.stdout.write(self.style.SUCCESS('Data transfer completed successfully!'))

        except Exception as e:
            self.stdout.write(self.style.ERROR(f'An error occurred: {str(e)}'))

        finally:
            # Close database connections
            mysql_cursor.close()
            mysql_conn.close()
            mongo_client.close()
