# config.py
import os
from urllib.parse import urlparse

# PostgreSQL configuration for cPanel
# DATABASE_URL can be in format: postgresql://user:password@host:port/dbname
DATABASE_URL = os.environ.get('DATABASE_URL')
DB_HOST = os.environ.get('DB_HOST', 'localhost')
DB_USER = os.environ.get('DB_USER', 'postgres')
DB_PASSWORD = os.environ.get('DB_PASSWORD', '')
DB_NAME = os.environ.get('DB_NAME', 'clothing_inventory')
DB_PORT = os.environ.get('DB_PORT', '5432')

# Parse DATABASE_URL if provided (properly handles special characters in password)
if DATABASE_URL:
    try:
        parsed_url = urlparse(DATABASE_URL)
        DB_USER = parsed_url.username or DB_USER
        DB_PASSWORD = parsed_url.password or DB_PASSWORD
        DB_HOST = parsed_url.hostname or DB_HOST
        DB_PORT = str(parsed_url.port) if parsed_url.port else DB_PORT
        DB_NAME = parsed_url.path.lstrip('/') if parsed_url.path else DB_NAME
    except Exception as e:
        print(f"Warning: Could not parse DATABASE_URL: {e}. Using environment variables.")
else:
    # Use individual components for local development or cPanel manual setup
    DB_HOST = os.environ.get('DB_HOST', DB_HOST)
    DB_USER = os.environ.get('DB_USER', DB_USER)
    DB_PASSWORD = os.environ.get('DB_PASSWORD', DB_PASSWORD)
    DB_NAME = os.environ.get('DB_NAME', DB_NAME)
    DB_PORT = os.environ.get('DB_PORT', DB_PORT)

# Secret key for flash messages and sessions
SECRET_KEY = os.environ.get('SECRET_KEY', os.urandom(24).hex())

# Admin credentials (set via environment variables in cPanel)
ADMIN_USERNAME = os.environ.get('ADMIN_USERNAME', 'admin')
# Store hashed password in environment variable
# Generate hash: python -c "import bcrypt; print(bcrypt.hashpw(b'your_password', bcrypt.gensalt()).decode())"
ADMIN_PASSWORD_HASH = os.environ.get('ADMIN_PASSWORD_HASH', '')

# Upload configuration - Local storage (cPanel friendly)
UPLOAD_FOLDER = 'static/uploads'
MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 16MB max file size
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}

# Cloudinary configuration (optional - leave empty to use local storage)
CLOUDINARY_CLOUD_NAME = os.environ.get('CLOUDINARY_CLOUD_NAME', '')
CLOUDINARY_API_KEY = os.environ.get('CLOUDINARY_API_KEY', '')
CLOUDINARY_API_SECRET = os.environ.get('CLOUDINARY_API_SECRET', '')
USE_CLOUDINARY = bool(CLOUDINARY_CLOUD_NAME and CLOUDINARY_API_KEY and CLOUDINARY_API_SECRET)

# Cloudinary optimization settings for mobile
def get_optimized_image_url(url, width=800, quality='auto'):
    """
    Optimize Cloudinary images for mobile devices
    Adds transformation parameters to Cloudinary URLs
    """
    if not url or not url.startswith('http'):
        return url
    
    # Check if it's a Cloudinary URL
    if 'cloudinary.com' in url:
        # Add optimization parameters
        # Insert transformation after /upload/
        if '/upload/' in url:
            url_parts = url.split('/upload/')
            # w_800 = max width 800px, q_auto = auto quality, f_auto = auto format
            optimizations = f'w_{width},q_{quality},f_auto,c_limit'
            optimized_url = f"{url_parts[0]}/upload/{optimizations}/{url_parts[1]}"
            return optimized_url
    
    return url