function tsk = newTask(Tocc,Tserv,type,loc)
% tsk = newTask(Tocc,Tserv,type,loc)
%     restituisce una struttura di tipo task (in accordo con quanto
%     dichiarato nella funzione simTask_MAIN.m)
%     Tocc: tempo di occorrenza del task
%     Tserv: tempo di servizio del task
%     type: tipologia di task {'op','trk','str','pat'}
%     loc: area di pertinenza del task (ID agente per i task di tipo OP)

% crea un nuovo task.    
    global Tdrop V;
    persistent NofT;    %contatore dei task (persistent = non viene perso
                        % il valore all'uscita dalla funzione.)
    if isempty(NofT), NofT = 0; end     %inizializzazione
    NofT = NofT + 1;    %aggiornamento
    
    tsk.ID = NofT;          %ID
    tsk.Tocc = Tocc;        %istante di occorrenza del task
    tsk.type = lower(type); %tipo del task
    tsk.loc = loc;          %localizzazione
    switch type
        case 'op'   %BRANDEGGIO OPERATORE:
            td = Tdrop;     %droptime
            pr = 1;         %priorita'
            list = loc;     %agente compatibile
        case 'trk'  %TRACKING:
            td = Tdrop;             %droptime
            pr = .75;               %priorita'
            list = find(V(:,loc));  %agenti compatibili
        case 'str'  %STREAMING:
            td = Tdrop;             %droptime
            pr = .5;                %priorita'
            list = find(V(:,loc));  %agenti compatibili
        case 'pat'  %PATROLING:
            td = inf;               %nessun droptime
            pr = .25;               %priorita'
            list = find(V(:,loc));  %agenti compatibili
    end
    tsk.Tserv = Tserv;      %tempo residuo di servizio
    tsk.pr = pr;            %priorita' intrinseca normalizzata (dipende dal tipo)
    tsk.list = list;        %ID degli agenti compatibili con il task
    tsk.a = 0;              %ID agente che esegue il task. 0=non assegnato.
    tsk.TservIn = Tserv;    %tempo di servizio totale
    tsk.Tdrop = td;         %tempo massimo concesso al task per essere assegnato e completato
end

