% STD_UNIFORMFILES - Check uniform channel distribution across data files
%
% Usage:    
%     >> boolval = std_uniformfiles(STUDY, ALLEEG);   
%
% Inputs:
%   STUDY      - EEGLAB STUDY
%
% Outputs:
%   boolval    - [-1|0|1] 0 if non uniform, 1 if uniform, -1 if error
%
% Authors: Arnaud Delorme, SCCN/UCSD, CERCO/CNRS, 2010-

% Copyright (C) Arnaud Delorme
%
% This file is part of EEGLAB, see http://www.eeglab.org
% for the documentation and details.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% 1. Redistributions of source code must retain the above copyright notice,
% this list of conditions and the following disclaimer.
%
% 2. Redistributions in binary form must reproduce the above copyright notice,
% this list of conditions and the following disclaimer in the documentation
% and/or other materials provided with the distribution.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
% THE POSSIBILITY OF SUCH DAMAGE.

function uniformlabels = std_uniformfiles( STUDY, ALLEEG );

if nargin < 2
    help std_checkconsist;
    return;
end

filetypes = { 'daterp' 'datspec' 'datersp' 'datitc' 'dattimef' };

% set channel interpolation mode
% ------------------------------
uniformlabels = [];

count = 1;
selectedtypes = {};
for index = 1:length(filetypes)
    
    % scan datasets
    % -------------
    [ tmpstruct compinds filepresent ] = std_fileinfo(ALLEEG, filetypes{index});
    
    % check if the structures are equal
    % ---------------------------------
    if ~isempty(tmpstruct)
        if any(filepresent == 0)
            uniformlabels = -1;
            return;
        else
            firstval = tmpstruct(1).labels;
            uniformlabels(count) = length(firstval);
            for dat = 2:length(tmpstruct)
                tmpval = tmpstruct(dat).labels;
                if ~isequal(firstval, tmpval)
                     uniformlabels(count) = 0;
                end
            end
            selectedtypes{count} = filetypes{index};
            count = count+1;
        end
    end
end

% check output
% ------------
if any(uniformlabels == 0)
    if any(uniformlabels) == 1
        disp('Warning: conflict between datafiles - all should have the same channel distribution');
        for index = 1:length(selectedtypes)
            if uniformlabels(index)
                 fprintf('  Data files with extension "%s" have interpolated channels\n',  selectedtypes{index});
            else fprintf('  Data files with extension "%s" have non-interpolated channels\n', selectedtypes{index});
            end
        end
        uniformlabels = -1;
    else
        uniformlabels = 0;
    end
else
    if ~(length(unique(uniformlabels)) == 1)
        fprintf('Warning: Data files have different number of channel in each file\n');
        for index = 1:length(selectedtypes)
            fprintf('  Data files with extension "%s" have %d channels\n',  selectedtypes{index}, uniformlabels(index));
        end
    end
    uniformlabels = 1;
end
