import "lib/utilsLib" as utilsLib;
import "lib/stringLib" as stringLib;
import "lib/numberLib" as numberLib;
import "lib/journalLib" as journalLib;

def formatExperienceTitle:
  . as $experience |
  "\"\(.title)\": \(.creationDate / 1000 | strftime("%d-%m-%Y"))";

def formatDose($dose; $unit; $isEstimate; $standardDeviation):
  if $dose == null then
    "Unknown \($unit)"
  else 
    (if $isEstimate then "~" else "" end) as $estimate |
    (if $standardDeviation != null then "±\($standardDeviation)" else "" end) as $standardDeviation |

    "\($estimate)\($dose | numberLib::round(2))\($standardDeviation) \($unit)"
  end;

def formatIngestionDose($customUnits):
  . as $ingestion |
  (. | journalLib::ingestionDose($customUnits)) as $dose |
  (. | journalLib::ingestionUnit($customUnits)) as $unit |
  (. | journalLib::ingestionStandardDeviation($customUnits)) as $standardDeviation |
  $customUnits | map(select(.id == $ingestion.customUnitId))[0] as $customUnit |
  if $ingestion.dose == null then
    "Unknown"
  elif $customUnit == null then
    formatDose($dose; $unit; $ingestion.isDoseAnEstimate; $standardDeviation)
  else
    formatDose($dose; $unit; $ingestion.isDoseAnEstimate; $standardDeviation) +
    " (" +
    formatDose($customUnit.dose; $unit; $customUnit.isEstimate; $customUnit.estimatedDoseStandardDeviation) +
    " * " +
    formatDose($ingestion.dose; $customUnit.unit; $ingestion.isDoseAnEstimate; $ingestion.estimatedDoseStandardDeviation) +
    ")"
  end;

def formatIngestionTime:
  . as $ingestion |
  $ingestion.time / 1000 | strftime("%a %I:%M %p");

def formatIngestionROA($customUnits; $substitutions):
  . as $ingestion |
  $ingestion.administrationRoute as $roa |

  (if 
    $substitutions | has($roa)
  then
    $substitutions | .[$roa]
  else
    $roa | stringLib::titleCase
  end) as $roaText |

  $ingestion.customUnitId as $customUnitId |

  if 
    $customUnitId == null
  then
    $roaText
  else
    $customUnits | map(select(.id == $customUnitId))[0] as $customUnit |
    "\($roaText) (\($customUnit.name))"
  end;

def formatIngestionROA($customUnits): formatIngestionROA($customUnits; {});

def formatIngestionInfo:
  . as $ingestionInfo |
  formatDose(.dose; .unit; .isEstimate; .standardDeviation);