%% vincoli non lineari trasferta diretta NRHO-LEO
function [c,ceq] = vincoli_direct(X,t0,H,errH,inc,errI)

if nargin < 5
     inc = [];
end

% propagazione traiettoria
[Y_t,t_t,Xf_t,~,ie] = propagazione_traj(X,t0);
Xfin = Xf_t(end,:)';                                                       % estraggo stato di arrivo

% calcolo dV impulso circolarizzante
dV_fin = circolarizzazione(Xfin,1,t_t(end),inc);

r = H(1) + 6378;                                                              % posizione target
r_fin = Xfin(1:3);
dpos = abs(norm(r_fin)-r);                                                 % calcolo errore all'arrivo

c = dpos-errH;

if ~isempty(ie)
    c = [c;1];
else
    c = [c;-1];
end

if ~isscalar(H)
    rrel_apo = max(vecnorm(Y_t(:,1:3),2,2));
    apo_min = H(2);
    c = [c;apo_min-rrel_apo];
    if length(H) == 3
        apo_max = H(3);
        c = [c;rrel_apo-apo_max];
    end
end

if ~isempty(inc)
    XLLO = Xfin + [zeros(3,1); dV_fin];                                         % stato iniziale dell'orbita LLO
    kep_fin = state2kep(XLLO,1,t_t(end));                                  % estraggo parametri orbitali
    inc_fin = kep_fin(3)*180/pi;                                           % vincolo inclinazione
    dinc = abs(inc-inc_fin);
    c = [c;(dinc-errI)*10];
end

ceq = [];
