%
% -----------------
% Copyright © 2022 ACK Cyfronet AGH, Poland.
% -----------------
%
function [sortedCatalog] = sortByTime(catalog)
% SORTBYTIME Sorts a seismic catalog structure by the 'Time' column
%
%   sortedCatalog = SORTBYTIME(catalog) sorts the given catalog structure
%   based on the values in the 'Time' column. The catalog is expected to be
%   an array of structures where each structure has fields 'field' and
%   'val'. The function rearranges the catalog entries in ascending order
%   of time.
%
%   This function is specific to seismic catalogs. For more general
%   information on catalogs, refer to:
%   https://docs.cyfronet.pl/display/ISDOC/Catalog+-+description
%
%   Example:
%       catalog(1).field = 'ID'; catalog(1).val = [3, 2, 1];
%       catalog(2).field = 'Time'; catalog(2).val = [300, 200, 100];
%       sortedCatalog = sortByTime(catalog);
%       % Result: sortedCatalog(2).val = [100, 200, 300]
%
%   See also: FINDCATALOGCOLUMN, SORTROWS.

  timeColIndex = find(strcmp('Time', {catalog.field}));
  if ~isempty(timeColIndex)
      [~, sortedIndexes] = sortrows(catalog(timeColIndex).val);
      for i = 1:length(catalog)
          catalog(i).val = catalog(i).val(sortedIndexes);
      end
  end
  sortedCatalog = catalog;
end