import os
import sys
from urllib.parse import quote_plus

# Add the backend directory to the Python path
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'backend'))

# Import environment variables
from dotenv import load_dotenv
load_dotenv()

# Import encryption utilities
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'backend', 'app', 'utils'))
from encryption import decrypt_password, is_encrypted

def get_decrypted_env_var(var_name, default=''):
    """Get an environment variable and decrypt it if necessary"""
    value = os.getenv(var_name, default)
    if value and is_encrypted(value):
        try:
            return decrypt_password(value)
        except Exception as e:
            print(f"Error decrypting {var_name}: {e}")
            return value
    return value

# Get database connection parameters
database_user = os.getenv('DATABASE_USER', 'postgres')
database_password = get_decrypted_env_var('DATABASE_PASSWORD')
database_host = os.getenv('DATABASE_HOST', 'localhost')
database_port = os.getenv('DATABASE_PORT', '5432')
database_name = os.getenv('DATABASE_NAME', 'bookbeach')

print(f"Database user: {database_user}")
print(f"Database host: {database_host}")
print(f"Database port: {database_port}")
print(f"Database name: {database_name}")
print(f"Database password length: {len(database_password) if database_password else 0}")

# Create database engine
database_url = f"postgresql://{database_user}:{quote_plus(database_password)}@{database_host}:{database_port}/{database_name}"
print(f"Connecting to database: {database_url}")

from sqlalchemy import create_engine, text

# Read and execute the migration script
with open('04_add_beach_design_fields.sql', 'r') as f:
    sql = f.read()

try:
    engine = create_engine(database_url)
    with engine.connect() as db:
        db.execute(text(sql))
        db.commit()
        print('Beach design fields added successfully')
except Exception as e:
    print(f"Error running migration: {e}")
    import traceback
    traceback.print_exc()