"""Runtime platform settings: env bootstrap, DB storage, Django settings sync."""

import os

_RUNTIME_SETTING_MAP = (
    ('default_wallet_currency', 'DEFAULT_WALLET_CURRENCY', lambda v: str(v).strip().upper()[:3]),
    ('document_reminder_days', 'DOCUMENT_REMINDER_DAYS', int),
    ('analytics_transporter_bid_window_days', 'ANALYTICS_TRANSPORTER_BID_WINDOW_DAYS', int),
    ('on_time_delivery_grace_hours', 'ON_TIME_DELIVERY_GRACE_HOURS', int),
    ('nearby_load_notify_radius_km', 'NEARBY_LOAD_NOTIFY_RADIUS_KM', float),
    ('nearby_publish_notify_max', 'NEARBY_PUBLISH_NOTIFY_MAX', int),
    ('navigation_naive_speed_kph', 'NAVIGATION_NAIVE_SPEED_KPH', float),
    ('pod_max_delivery_distance_km', 'POD_MAX_DELIVERY_DISTANCE_KM', float),
    ('admin_stale_trip_hours', 'ADMIN_STALE_TRIP_HOURS', int),
    ('bidding_rate_distribution_count', 'BIDDING_RATE_DISTRIBUTION_COUNT', int),
)


def _env_int(key, default):
    return int(os.environ.get(key, str(default)))


def _env_float(key, default):
    return float(os.environ.get(key, str(default)))


def env_defaults_for_platform_settings():
    """Initial values for PlatformSettings row (env overrides Django field defaults)."""
    return {
        'default_wallet_currency': os.environ.get('DEFAULT_WALLET_CURRENCY', 'USD').strip().upper()[:3],
        'document_reminder_days': _env_int('DOCUMENT_REMINDER_DAYS', 30),
        'analytics_transporter_bid_window_days': _env_int('ANALYTICS_TRANSPORTER_BID_WINDOW_DAYS', 90),
        'on_time_delivery_grace_hours': _env_int('ON_TIME_DELIVERY_GRACE_HOURS', 24),
        'nearby_load_notify_radius_km': _env_float('NEARBY_LOAD_NOTIFY_RADIUS_KM', 50),
        'nearby_publish_notify_max': _env_int('NEARBY_PUBLISH_NOTIFY_MAX', 50),
        'navigation_naive_speed_kph': _env_float('NAVIGATION_NAIVE_SPEED_KPH', 45),
        'pod_max_delivery_distance_km': _env_float('POD_MAX_DELIVERY_DISTANCE_KM', 0),
        'admin_stale_trip_hours': _env_int('ADMIN_STALE_TRIP_HOURS', 48),
        'bidding_rate_distribution_count': _env_int('BIDDING_RATE_DISTRIBUTION_COUNT', 1),
    }


def apply_platform_settings_to_django():
    """Override django.conf.settings from the PlatformSettings singleton when present."""
    try:
        from django.conf import settings
        from accounts.models import PlatformSettings
    except Exception:
        return

    try:
        ps = PlatformSettings.objects.filter(pk=1).first()
    except Exception:
        return
    if ps is None:
        return

    for field_name, setting_name, coerce in _RUNTIME_SETTING_MAP:
        setattr(settings, setting_name, coerce(getattr(ps, field_name)))
