from django.db import connection
from django.conf import settings

from .pgdump import dump_postgres_db

try:
    from .mysqldump import dump_mysql_db
except ImportError:
    dump_mysql_db = None


def dump_database(output_file):
    """
    Create a database dump based on the configured database engine.
    
    Args:
        output_file (str): Output dump file path
        
    Returns:
        bool: True if successful, False otherwise
    """
    db = settings.DATABASES["default"]
    db_vendor = connection.vendor
    
    if db_vendor == "postgresql":
        return dump_postgres_db(
            db_name=db["NAME"],
            username=db["USER"],
            output_file=output_file,
            password=db["PASSWORD"],
            host=db.get("HOST", "localhost"),
            port=db.get("PORT", 5432),
        )
    elif db_vendor == "mysql":
        if dump_mysql_db is None:
            raise ImportError("MySQL dump functionality not available")
        return dump_mysql_db(
            db_name=db["NAME"],
            username=db["USER"],
            output_file=output_file,
            password=db["PASSWORD"],
            host=db.get("HOST", "localhost"),
            port=db.get("PORT", 3306),
        )
    else:
        raise ValueError(f"Unsupported database vendor: {db_vendor}")


def is_supported_database():
    """
    Check if the current database is supported for backup.
    
    Returns:
        bool: True if supported (PostgreSQL or MySQL), False otherwise
    """
    vendor = connection.vendor
    
    if vendor == "postgresql":
        return True
    elif vendor == "mysql":
        return dump_mysql_db is not None
    else:
        return False