/// 单位系统模块
/// 简化版单位系统,提供基本的单位转换功能
/// 注意:MoonBit 没有类似 pint 的完整单位系统,这里提供基础的转换函数

///|
/// 单位转换函数 - 压力
pub fn pa_to_hpa(pa : Double) -> Double {
  pa / 100.0
}

///|
pub fn hpa_to_pa(hpa : Double) -> Double {
  hpa * 100.0
}

///|
pub fn pa_to_mbar(pa : Double) -> Double {
  pa / 100.0
}

///|
pub fn mbar_to_pa(mbar : Double) -> Double {
  mbar * 100.0
}

///|
/// 单位转换函数 - 温度
pub fn kelvin_to_celsius(k : Double) -> Double {
  k - 273.15
}

///|
pub fn celsius_to_kelvin(c : Double) -> Double {
  c + 273.15
}

///|
pub fn kelvin_to_fahrenheit(k : Double) -> Double {
  (k - 273.15) * 9.0 / 5.0 + 32.0
}

///|
pub fn fahrenheit_to_kelvin(f : Double) -> Double {
  (f - 32.0) * 5.0 / 9.0 + 273.15
}

///|
/// 单位转换函数 - 长度
pub fn meter_to_kilometer(m : Double) -> Double {
  m / 1000.0
}

///|
pub fn kilometer_to_meter(km : Double) -> Double {
  km * 1000.0
}

///|
pub fn meter_to_feet(m : Double) -> Double {
  m * 3.28084
}

///|
pub fn feet_to_meter(ft : Double) -> Double {
  ft / 3.28084
}

///|
/// 单位转换函数 - 速度
pub fn mps_to_knots(mps : Double) -> Double {
  mps * 1.94384
}

///|
pub fn knots_to_mps(knots : Double) -> Double {
  knots / 1.94384
}

///|
pub fn mps_to_kmph(mps : Double) -> Double {
  mps * 3.6
}

///|
pub fn kmph_to_mps(kmph : Double) -> Double {
  kmph / 3.6
}

///|
/// 单位转换函数 - 角度
pub fn degrees_to_radians(deg : Double) -> Double {
  deg * 3.141592653589793 / 180.0
}

///|
pub fn radians_to_degrees(rad : Double) -> Double {
  rad * 180.0 / 3.141592653589793
}

///|
/// 检查数值是否在合理范围内(用于单位验证的辅助函数)
pub fn is_valid_temperature(k : Double) -> Bool {
  k > 0.0 && k < 1000.0
}

///|
pub fn is_valid_pressure(pa : Double) -> Bool {
  pa > 0.0 && pa < 100000000
}

///|
pub fn is_valid_angle_degrees(deg : Double) -> Bool {
  deg >= -360.0 && deg <= 360.0
}

///|
/// 规范化角度到 [0, 360) 范围
pub fn normalize_angle_degrees(deg : Double) -> Double {
  let deg_mod = deg % 360.0
  if deg_mod < 0.0 {
    deg_mod + 360.0
  } else {
    deg_mod
  }
}

///|
/// 规范化角度到 [-180, 180) 范围
pub fn normalize_angle_degrees_signed(deg : Double) -> Double {
  let deg_mod = deg % 360.0
  if deg_mod > 180.0 {
    deg_mod - 360.0
  } else if deg_mod <= -180.0 {
    deg_mod + 360.0
  } else {
    deg_mod
  }
}