%% (Internal) Init environment variables for using WFDB toolbox
%   
%   WFDB_bin_path =  init_WFDB_library(tmp_path_local)
% 
% Arguments:
% 
%      + tmp_path_local: a path for temporary data
% 
% Output:
% 
%      + WFDB_bin_path: The path to the WFDB command, depending of the architecture used.
% 
% Example:
% 
% See also get_ECG_idx_from_header, ECGwrapper
% 
% Author: Mariano Llamedo Soria llamedom@electron.frba.utn.edu.ar
% Version: 0.1 beta
% Last update: 14/5/2014
% Birthdate  : 21/4/2015
% Copyright 2008-2015
% 
function WFDB_bin_path =  init_WFDB_library(tmp_path_local)

    WFDB_paths = { ...
                    ['wfdb' filesep 'linux-amd64' filesep ] ...
                    ['wfdb' filesep 'macosx-x86_64' filesep 'bin' ] ...
                    ['wfdb' filesep 'windows-amd64' filesep 'bin' ] ...
                    };
    WFDB_UNIX_idx = 1;
    WFDB_MAC_idx = 2;
    WFDB_WIN_idx = 3;

    persistent WFDB_initiated

    if( ispc() )
        path_OS_var = 'Path';
        path_sep = ';';
        bin_path  = WFDB_paths{WFDB_WIN_idx};

    elseif( isunix()  )            
        path_OS_var = 'PATH';
        libpath_OS_var = 'LD_LIBRARY_PATH';
        path_sep = ':';
        bin_path  = [ WFDB_paths{WFDB_UNIX_idx} 'bin'];
        lib_path  = [ WFDB_paths{WFDB_UNIX_idx} 'lib64'];

    elseif( ismac() )            
        path_OS_var = 'PATH';
        path_sep = ':';
        bin_path  = WFDB_paths{WFDB_MAC_idx};

    else
        warning('Unknown system architecture. WFDB library QRS detectors probably won''t work.')
        path_OS_var = 'PATH';
    end

    % this file is located in common folder.
    common_path = fileparts(mfilename('fullpath'));
    WFDB_bin_path = [common_path filesep bin_path filesep];         
    
    wfdb_val = getenv('WFDB');
    if( isempty(strfind(wfdb_val, tmp_path_local ) ))
        aux_str = tmp_path_local;
        if( aux_str(end) == filesep )
            aux_str = aux_str(1:end-1);
        end
        if( isempty(wfdb_val))
            wfdb_val = aux_str;
        else
            wfdb_val = [wfdb_val path_sep aux_str];
        end
    end
    setenv('WFDB', wfdb_val);     
    
    if( isempty(WFDB_initiated) || ~WFDB_initiated )

        % WFDB paths required to locate recordings and binaries
        this_path = getenv(path_OS_var);
        if( isempty(strfind(this_path, WFDB_bin_path ) ))
            setenv(path_OS_var, [this_path path_sep WFDB_bin_path]);
        end
        
        % WFDB paths required to locate shared libraries
        if( isunix() )
            WFDB_lib_path = [common_path filesep lib_path filesep ];
            this_path = getenv(libpath_OS_var);
            setenv(libpath_OS_var, [this_path path_sep WFDB_lib_path ]);
        end
        
        WFDB_initiated = true;
        
    end
    

    