#!/usr/bin/env python3
"""
Backup current database before migration
"""
import os
import sys
import subprocess
from datetime import datetime
import json

def load_env_config():
    """Load database configuration from .env file"""
    config = {}
    env_path = '/home/whgoparts/public_html/whims-dev/.env'

    with open(env_path, 'r') as f:
        for line in f:
            line = line.strip()
            if line and not line.startswith('#') and '=' in line:
                key, value = line.split('=', 1)
                config[key] = value.strip('"').strip("'")

    return config

def backup_database():
    """Create a backup of the current database"""
    config = load_env_config()

    db_host = config.get('DB_HOST', 'localhost')
    db_port = config.get('DB_PORT', '3306')
    db_name = config.get('DB_DATABASE', 'whims_dev')
    db_user = config.get('DB_USERNAME', 'root')
    db_pass = config.get('DB_PASSWORD', '')

    # Create backup filename with timestamp
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    backup_file = f'/home/whgoparts/public_html/whims-dev/migration-dev/backup_{db_name}_{timestamp}.sql'

    print(f"Creating backup of database '{db_name}'...")
    print(f"Backup file: {backup_file}")

    # Build mysqldump command
    cmd = [
        'mysqldump',
        f'-h{db_host}',
        f'-P{db_port}',
        f'-u{db_user}',
    ]

    if db_pass:
        cmd.append(f'-p{db_pass}')

    cmd.extend([
        '--single-transaction',
        '--routines',
        '--triggers',
        '--events',
        db_name
    ])

    try:
        with open(backup_file, 'w') as f:
            result = subprocess.run(cmd, stdout=f, stderr=subprocess.PIPE, text=True)

        if result.returncode == 0:
            file_size = os.path.getsize(backup_file) / (1024 * 1024)  # Size in MB
            print(f"✅ Backup completed successfully!")
            print(f"   File size: {file_size:.2f} MB")
            return backup_file
        else:
            print(f"❌ Backup failed: {result.stderr}")
            sys.exit(1)

    except Exception as e:
        print(f"❌ Error creating backup: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    backup_file = backup_database()

    # Save backup info to a JSON file for reference
    backup_info = {
        'backup_file': backup_file,
        'timestamp': datetime.now().isoformat(),
        'database': 'whims_dev'
    }

    with open('/home/whgoparts/public_html/whims-dev/migration-dev/finale-files/last_backup.json', 'w') as f:
        json.dump(backup_info, f, indent=2)

    print("\n✅ Backup information saved to finale-files/last_backup.json")
    print("You can restore this backup using:")
    print(f"mysql -u[user] -p[password] whims_dev < {backup_file}")