Corin1998's picture
Create costs.py
5a131e7 verified
from __future__ import annotations
import os
from typing import Literal
Mode = Literal["Walk", "Transit", "Drive/Taxi"]
def _get_float(name: str, default: float) -> float:
try:
return float(os.getenv(name, default))
except Exception:
return default
# デフォルト(東京の概算)— 環境変数で上書き可
TAXI_BASE_FARE = _get_float("TAXI_BASE_FARE", 500.0) # 初乗り
TAXI_PER_KM = _get_float("TAXI_PER_KM", 320.0) # 1kmあたり
TAXI_PER_MIN = _get_float("TAXI_PER_MIN", 0.0) # 分課金があれば
TRANSIT_BASE = _get_float("TRANSIT_BASE_FARE", 210.0) # 乗車初乗り
TRANSIT_PER_KM= _get_float("TRANSIT_PER_KM", 25.0) # 1kmあたり(概算)
def estimate_leg_cost(mode: Mode, distance_km: float, duration_min: float, fare_hint: float | None = None) -> float:
"""1区間の概算費用(JPY)を返す。公共交通はAPIのfare_hint優先。"""
if mode == "Walk":
return 0.0
if mode == "Drive/Taxi":
return TAXI_BASE_FARE + TAXI_PER_KM * max(0.0, distance_km) + TAXI_PER_MIN * max(0.0, duration_min)
if mode == "Transit":
if fare_hint is not None:
return float(fare_hint)
return TRANSIT_BASE + TRANSIT_PER_KM * max(0.0, distance_km)
return 0.0