///|
/// Dataset validation combines structural and mapping checks for importers.
pub enum DatasetIssue {
  InvalidEntry(Int, EntryValidation)
  UnmappedEntry(Int, String)
  DuplicateEntry(Int, Int)
} derive(Debug, Eq)

///|
pub fn validate_dataset(
  entries : Array[Entry],
  mappings : Array[AccountMapping],
) -> Array[DatasetIssue] {
  let issues : Array[DatasetIssue] = []
  for i, entry in entries {
    match validate_entry(entry) {
      ValidEntry => ()
      issue => issues.push(InvalidEntry(i, issue))
    }
    if find_mapping(mappings, entry.account) is None {
      issues.push(UnmappedEntry(i, entry.account))
    }
    for j in 0.. Array[Entry] {
  let result : Array[Entry] = []
  for entry in entries {
    if validate_entry(entry) is ValidEntry &&
      find_mapping(mappings, entry.account) is Some(_) {
      result.push(entry)
    }
  }
  result
}

///|
pub fn entries_for_period(
  entries : Array[Entry],
  period : String,
) -> Array[Entry] {
  let result : Array[Entry] = []
  for entry in entries {
    if entry.period == period {
      result.push(entry)
    }
  }
  result
}