"""
Soil class
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2022 Concordia CERC group
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""


class Soil:
  def __init__(self, name, roughness, dry_conductivity, dry_density, dry_specific_heat, thermal_absorptance,
               solar_absorptance, visible_absorptance, saturation_volumetric_moisture_content,
               residual_volumetric_moisture_content):
    self._name = name
    self._roughness = roughness
    self._dry_conductivity = dry_conductivity
    self._dry_density = dry_density
    self._dry_specific_heat = dry_specific_heat
    self._thermal_absorptance = thermal_absorptance
    self._solar_absorptance = solar_absorptance
    self._visible_absorptance = visible_absorptance
    self._saturation_volumetric_moisture_content = saturation_volumetric_moisture_content
    self._residual_volumetric_moisture_content = residual_volumetric_moisture_content
    self._initial_volumetric_moisture_content = None

  @property
  def name(self):
    """
    Get soil name
    :return: string
    """
    return self._name

  @property
  def roughness(self):
    """
    Get soil roughness
    :return: string
    """
    return self._roughness

  @property
  def dry_conductivity(self):
    """
    Get soil dry conductivity in W/mK
    :return: float
    """
    return self._dry_conductivity

  @property
  def dry_density(self):
    """
    Get soil dry density in kg/m3
    :return: float
    """
    return self._dry_density

  @property
  def dry_specific_heat(self):
    """
    Get soil dry specific heat in J/kgK
    :return: float
    """
    return self._dry_specific_heat

  @property
  def thermal_absorptance(self):
    """
    Get soil thermal absortance
    :return: float
    """
    return self._thermal_absorptance

  @property
  def solar_absorptance(self):
    """
    Get soil solar absortance
    :return: float
    """
    return self._solar_absorptance

  @property
  def visible_absorptance(self):
    """
    Get soil visible absortance
    :return: float
    """
    return self._visible_absorptance

  @property
  def saturation_volumetric_moisture_content(self):
    """
    Get soil saturation volumetric moisture content
    :return: float
    """
    return self._saturation_volumetric_moisture_content

  @property
  def residual_volumetric_moisture_content(self):
    """
    Get soil residual volumetric moisture content
    :return: None or float
    """
    return self._residual_volumetric_moisture_content

  @residual_volumetric_moisture_content.setter
  def residual_volumetric_moisture_content(self, value):
    """
    Set soil residual volumetric moisture content
    :param value: float
    """
    self._residual_volumetric_moisture_content = value

  @property
  def initial_volumetric_moisture_content(self):
    """
    Get soil initial volumetric moisture content
    :return: None or float
    """
    return self._initial_volumetric_moisture_content

  @initial_volumetric_moisture_content.setter
  def initial_volumetric_moisture_content(self, value):
    """
    Set soil initial volumetric moisture content
    :param value: float
    """
    self._initial_volumetric_moisture_content = value
