from app.core.geo import GeoPoint from app.core.propagation import manual_link_budget from app.models.link import LinkBudgetRequest, LinkBudgetResponse def link_budget(request: LinkBudgetRequest) -> LinkBudgetResponse: if request.model != "manual": raise NotImplementedError(f"{request.model} link model is implemented in a later stage") budget = manual_link_budget( tx=GeoPoint(lat=request.tx.lat, lon=request.tx.lon), rx=GeoPoint(lat=request.rx.lat, lon=request.rx.lon), tx_power_dbm=request.tx.power_dbm, tx_gain_dbi=request.tx.gain_dbi, rx_gain_dbi=request.rx.gain_dbi, sensitivity_dbm=request.rx.sensitivity_dbm, frequency_mhz=request.frequency_mhz, ) return LinkBudgetResponse(**budget.__dict__)