% Funzione che ricostruisce la tipologia di nodi presenti
% NodoRSNLink ad esempio contiene numero del nodo e profondità per tutti i
% nodi di questo tipo
% idTool rappresenta l'identificativo con cui sono definite le
% installazioni su DB, serve più avanti nell'elaborazione
% idNode scrive gli identificativi dei nodi del DB. E' un output di
% controllo

function [idTool,NodoRSNLink,NodoSS,NodoRSNLinkHR,NodoRSNLinkHR3D,NodoLoadLink,...
    NodoTriggerLink,NodoGflowLink,NodoGshockLink,NodoDebrisLink] = tipologiaNodi(...
    DTcatena,unitID,conn,FileName)

%% Informazioni e credenziali relative al DataBase da leggere

fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'tipologiaNodi function started';
fprintf(fileID,fmt,text);

%% A partire dal nome della catena, risalgo all'identificativo con cui è
% definita nel Database (mi serve successivamente)
comando = ['select id from tools where name = ''' DTcatena ''' and unit_id = ''' num2str(unitID) ''' '];
idTool = num2str(cell2mat(fetch(conn,comando))); % leggo e converto in stringa

%% RSN Link
% carico le informazioni relative al numero e alla profondità per RSN LINK
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 38 order by num'];
Leggo = fetch(conn,comando);
[rL,cL] = size(Leggo);
if rL <= 1 && cL <= 1
   textRSN = 'There are no RSN Link; ';
   NodoRSNLink = [];
   nodoRSN = 0; % mi serve nei RSN Link HR3D (SVILUPPO FUTURO?)
else
    nodoRSN = 1; % mi serve nei RSN Link HR3D (SVILUPPO FUTURO?)
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('RSN Link');
    end
    NodoRSNLink = [nome Leggo(:,1) depth Leggo(:,3)];
    textRSN = ['There are ',num2str(rL),' RSN Link nodes; '];
end
fprintf(fileID,fmt,textRSN);

%% Shock Sensor
% carico le informazioni relative al numero e alla profondità per SHOCK SENSOR
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 54 order by num'];
Leggo = fetch(conn,comando);
[rL,cL] = size(Leggo);
if rL <= 1 && cL <= 1
   textSS = 'There are no Shock Sensor; ';
   NodoSS = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('Shock Sensor');
    end
    NodoSS = [nome Leggo(:,1) depth Leggo(:,3)];
    textSS = ['There are ',num2str(rL),' Shock Sensor nodes; '];
end
fprintf(fileID,fmt,textSS);

%% RSN Link HR
% carico le informazioni relative al numero e alla profondità per 
% RSN LINK HR
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 39 order by num'];
Leggo = fetch(conn,comando);
[rL,cL] = size(Leggo);
if rL <= 1 && cL <= 1
   textRSNHR = 'There are not RSN HR Link; ';
   NodoRSNLinkHR = [];
   nodoRSNHR = 0; % mi serve nei RSN Link HR3D (SVILUPPO FUTURO?)
else
    nodoRSNHR = 1; % mi serve nei RSN Link HR3D (SVILUPPO FUTURO?)
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('RSN Link HR');
    end
    NodoRSNLinkHR = [nome Leggo(:,1) depth Leggo(:,3)];
    textRSNHR = ['There are ',num2str(rL),' RSN Link HR nodes; '];
end
fprintf(fileID,fmt,textRSNHR);

% confrontando le profondità di RSN Link e RSN Link HR riconosco i RSN LINK HR 3D
if  nodoRSN == 1 && nodoRSNHR == 1
    [rRSN,~] = size(NodoRSNLink);
    [rRSNHR,~] = size(NodoRSNLinkHR);
    NodoRSNLinkHR3Dwork = cell(rRSN,4); % creo matrice di zeri
    p=1;
    Control = 0;
    for i=1:rRSN
        for j=1:rRSNHR
            if  cell2mat(NodoRSNLink(i,3)) ==  cell2mat(NodoRSNLinkHR(j,3))
                prof = NodoRSNLink(i,3);
                nome = cellstr('RSN Link HR 3D');
                % il numero nodo del RSN Link lo faccio diventare il numero nodo del RSN Link HR3D
                num = NodoRSNLink(i,2);
                num2 = NodoRSNLinkHR(j,2);
                Leggo = [nome,num,num2,prof];
                NodoRSNLinkHR3Dwork(p,:) = Leggo;
                p = p+1;
                Control = 1;
                break
            end
        end
    end
    % elimino gli zeri in più
    q = 1;
    rL = 0;
    [s,~] = size(NodoRSNLinkHR3Dwork);
    a = 1;
    while a == 1
          if q > s
              a = 0;
          else
              if  strcmp(cell2mat(NodoRSNLinkHR3Dwork(q,1)),'RSN Link HR 3D')
                  rL = 1+rL; % ultima riga con dati che non siano celle vuote
              end
          end
           q = q+1;
    end
    if  Control == 1
        NodoRSNLinkHR3D = NodoRSNLinkHR3Dwork(1:rL,:);
    elseif  Control == 0
            NodoRSNLinkHR3D = [];
    end
    textRSNHR3D = ['There are ',num2str(rL),' RSN Link HR 3D nodes; '];
else
    textRSNHR3D = 'There are no RSN Link HR 3D; ';
    NodoRSNLinkHR3D = [];
end
fprintf(fileID,fmt,textRSNHR3D);

%% Load Link
% carico le informazioni relative al numero e alla profondità per LOAD LINK
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 15 order by num'];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
[rL,cL] = size(Leggo);
if rL == 1 && cL == 1
   textLL = 'There are not Load Link; ';
   NodoLoadLink = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('Load Link');
    end
    NodoLoadLink = [nome Leggo(:,1) depth Leggo(:,3)];
    % inverto la matrice Nodi (il primo nodo è il più profondo)
    textLL = ['There are ',num2str(rL),' Load Link nodes; '];
end
fprintf(fileID,fmt,textLL);

%% Trigger Link
% carico le informazioni relative al numero e alla profondità per TRIGGER LINK
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 40 order by num'];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
[rL,cL] = size(Leggo);
if rL == 1 && cL == 1
   textTrL = 'There are not Trigger Link; ';
   NodoTriggerLink = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('Trigger Link');
    end
    NodoTriggerLink = [nome Leggo(:,1) depth Leggo(:,3)];
    % inverto la matrice Nodi (il primo nodo è il più profondo)
    textTrL = ['There are ',num2str(rL),' Trigger Link nodes; '];
end
fprintf(fileID,fmt,textTrL);

%% G-Flow Link
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 48 order by num'];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
[rL,cL] = size(Leggo);
if rL == 1 && cL == 1
   textGFL = 'There are not G-Flow Link; ';
   NodoGflowLink = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('G-Flow Link');
    end
    NodoGflowLink = [nome Leggo(:,1) depth Leggo(:,3)];
    % inverto la matrice Nodi (il primo nodo è il più profondo)
    textGFL = ['There are ',num2str(rL),' G-Flow Link nodes; '];
end
fprintf(fileID,fmt,textGFL);

%% G-Shock Link
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 50 order by num'];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
[rL,cL] = size(Leggo);
if rL == 1 && cL == 1
   textGS = 'There are not G-Shock Link; ';
   NodoGshockLink = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('G-Shock Link');
    end
    NodoGshockLink = [nome Leggo(:,1) depth Leggo(:,3)];
    % inverto la matrice Nodi (il primo nodo è il più profondo)
    textGS = ['There are ',num2str(rL),' G-Shock Link nodes; '];
end
fprintf(fileID,fmt,textGS);

%% Debris Link
comando = ['select num, depth, measurment from nodes where tool_id = ''' idTool ''' and nodetype_id = 49 order by num'];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
[rL,cL] = size(Leggo);
if rL == 1 && cL == 1
   textDL = 'There are not Debris Link; ';
   NodoDebrisLink = [];
else
    depth = cell2mat(Leggo(:,2));
    depth = num2cell(depth);
    nome = cell(rL,1);
    for i=1:rL 
        nome(i,1) = cellstr('Debris Link');
    end
    NodoDebrisLink = [nome Leggo(:,1) depth Leggo(:,3)];
    % inverto la matrice Nodi (il primo nodo è il più profondo)
    textDL = ['There are ',num2str(rL),' Debris Link nodes; '];
end
fprintf(fileID,fmt,textDL);

text = 'Nodes defined correctly and tipologiaNodi function closed';
fprintf(fileID,fmt,text);
fclose(fileID);

end