%% post processing dei risultati delle ottimizzazioni, calcolo dV finale, parametri orbitali e grafici 
function [dVf,kep_fin,Y,tt,Y_moon,YLLO,if_t] = post_processing(X,t0,plt,parametro,inc)
if nargin < 5
    inc = [];
end

% propagazione trasferta
[Y,tt,Xf,if_t] = propagazione_traj(X,t0);
Y_moon = frame_moon_earth(Y,tt,1);                                         % cambio frame per trasferta

% calcolo output
dVf = circolarizzazione(Xf(end,:)',parametro,tt(end),inc);

XLLO = Xf(end,:)'+ [0;0;0;dVf];                                            % stato iniziale dell'orbita circolare
[tLLO,YLLO] = int_eqmoto(XLLO,tt(end),tt(end)+2*60*60,1,4);                % integrazione per 2 ore
if parametro == 2
    YLLO = frame_moon_earth(YLLO,tLLO,1);                                      % cambio frame per LLO
end
kep_fin = state2kep(XLLO,parametro,tt(end));                               % estraggo parametri orbitali

if ~isempty(plt)
    % orbita NRHO pre-trasferta
    t_nrho0 = tt(1)-9*60*60*24;                                            % simulo per 9 giorni
    t = linspace(t_nrho0,tt(1),600)';                                      % vettore dei tempi
    for j = 1:length(t)
        Y_nrho(j,:) = cspice_spkezr('-60000',t(j),'j2000','none','earth')';% matrice stati NRHO
    end
    if parametro == 2
        Y_nrho = frame_moon_earth(Y_nrho,t,1);                             % cambio frame per NRHO
        Y_trasf = Y_moon;
    else
        Y_trasf = Y;
    end
else
    plt = 0;
end

% plot grafici se richiesto
if plt == 1

    % grafico trasferta completa
    plot3(YLLO(:,1),YLLO(:,2),YLLO(:,3))
    grid on
    hold on
    axis equal
    plot3(Y_trasf(:,1),Y_trasf(:,2),Y_trasf(:,3),LineWidth=1.5)
    if parametro == 1
        plot3(Y_nrho(500:end,1),Y_nrho(500:end,2),Y_nrho(500:end,3),'k')
    else
        plot3(Y_nrho(:,1),Y_nrho(:,2),Y_nrho(:,3),'k')
    end
    plot_earth_moon(2)
    if parametro == 1
        plot_earth_moon(1)
    end
elseif plt == 2
    % grafico dell'arrivo
    plot3(YLLO(:,1),YLLO(:,2),YLLO(:,3),LineWidth=1.5)
    grid on
    hold on
    axis equal

    pt = round(length(tt)*0.8);
    plot3(Y_trasf(pt:end,1),Y_trasf(pt:end,2),Y_trasf(pt:end,3),LineWidth=1.5)
    if parametro == 1
        plot_earth_moon(1)
    else
        plot_earth_moon(2)
    end
elseif plt >= 3
    if parametro == 1
        Y_nrho = frame_moon_earth(Y_nrho,t,1);
    end
    % grafico della partenza
    pt = round(length(tt)*0.2);
    plot3(Y_moon(1:pt,1),Y_moon(1:pt,2),Y_moon(1:pt,3),LineWidth=1.5)
    grid on
    hold on
    axis equal

    if plt == 3
        plot3(Y_nrho(:,1),Y_nrho(:,2),Y_nrho(:,3),'k',LineWidth=1.5)
        plot_earth_moon(2)
    end
    view(3)
end

