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

import MySQLdb as db


class Command(BaseCommand):
    help = "Create a database from settings file prior to migrations."

    def add_arguments(self, parser):
        parser.add_argument(
            '--user',
            dest='user',
            help='Username to be used to create database',
        )
        parser.add_argument(
            '--password',
            dest='password',
            help='Password for the mysql user.',
        )
        parser.add_argument(
            '--db-name',
            dest='db_name',
            help='Name of the database if it is different from the one defined in settings',
        )

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Starting db creation'))

        dbname = options.get('db_name') or settings.DATABASES['default']['NAME']
        user = options.get('user') or settings.DATABASES['default']['USER']
        password = options.get('password') or settings.DATABASES['default']['PASSWORD']
        host = settings.DATABASES['default']['HOST']

        con = db.connect(user=user, host=host, password=password)
        cur = con.cursor()
        cur.execute(f'CREATE DATABASE {dbname}')
        cur.execute(f'ALTER DATABASE `{dbname}` CHARACTER SET utf8')
        cur.close()
        con.close()

        self.stdout.write(self.style.SUCCESS('All Done'))