function [] = automaticQC( hMainFig )
%
% function [] = automaticQC( hTsgGUI )
%
% Automatic controlon TSG time series
%
% Test for :
% 1 -  
% 2 -  Increasing date
% 3 -  SSS < 0 and SSS > 50
%
% TODO : Create a log file with the results of these tests
%

% Get application data : TSG structure
% --------------------------------------
tsg  = getappdata( hMainFig, 'tsg_data');

% Get tsg fieldnames
% ------------------
tsgNames     = fieldnames(tsg);
nbFieldNames = length( tsgNames );

% Get the size of the times series array
% --------------------------------------
tsgLength = length( tsg.DAYD );

% get MISSING_VALUE from tsg.qc.hash
% -----------------------------------
MISSING_VALUE = tsg.qc.hash.MISSING_VALUE.code;

% ************************** TEST 1 ***********************************
%
% Detect records with date and time at NaN.
% This is done in the reading function


% ************************** TEST 2 ***********************************
%
% Test if the records are correctly sorted : increasing date
% Delete the records with inversion
% 
% Find negative differences between successive dates
nbBadDate = 0;
difDate   = diff( tsg.DAYD );
ind       = find( difDate < 0 );
while ~isempty( ind )
  
  % if DAYD is of length N, DIFF is of length N-1
  % Need to add one to the indices
  % ---------------------------------------------
  ind = ind + 1;
  
  % Store the number of bad date
  % -----------------------------
  nbBadDate = nbBadDate + length( ind );
  
  % Delete bad records
  % ------------------
  for i = 1 : nbFieldNames
    
    para = char( tsgNames{i} );
    
    % Find array of length DAYD in the TSG structure
    % ----------------------------------------------
    if length( tsg.(para) ) == tsgLength
      tsg.(para)(ind,:) = [];
    end
  end

  % Tsg length has been modified
  % ----------------------------
  tsgLength = tsgLength - length( ind );
  
  difDate = diff( tsg.DAYD );
  ind     = find( difDate < 0 );
end

% Keep the number of data not in increasing date
% ----------------------------------------------
tsg.report.sortdate =  nbBadDate;

% NO_VALUE code
% -------------
ind = find( isnan(tsg.SSPS) == 1);
if ~isempty( ind )
  tsg.SSPS_QC(ind) = MISSING_VALUE;
end
ind = find( isnan(tsg.SSJT) == 1);
if ~isempty( ind )
  tsg.SSJT_QC(ind) = MISSING_VALUE;
end
ind = find( isnan(tsg.SSTP) == 1);
if ~isempty( ind )
  tsg.SSTP_QC(ind) = MISSING_VALUE;
end

% Save the data in the application GUI
% ------------------------------------
setappdata( hMainFig, 'tsg_data', tsg );

end