function result_status = getMNDVI(JSONString,JSONCurDate,prox_host)

pkg load image
JSONDate = JSONString;
%fprintf('we broke hre');
B4URL = JSONCurDate.Band4URI;

B8URL = strrep(B4URL,"B04.jp2","B08.jp2");

TCIURL = strrep(B4URL,"B04.jp2","TCI.jp2");
SensingDate = JSONCurDate.sensing_date;
B4FileName = 'TileB04.jp2';
B8FileName = 'TileB08.jp2';
TCIFileName = 'TileTCI.jp2';

%prox_https=strcat("https://",prox_host)

%putenv ('https_proxy', prox_https)

%pause(5);
try
urlwrite(TCIURL,TCIFileName);
catch
UID = JSONDate.UID;
result_status = strcat(UID,"failed0")
return
end
%pause(5);
try
urlwrite(B4URL,B4FileName);
catch
UID = JSONDate.UID;
result_status = strcat(UID,"failed0")
return
end

%pause(5);
try
urlwrite(B8URL,B8FileName);
catch
UID = JSONDate.UID;
result_status = strcat(UID,"failed0")
return
end


%pause(5);
%        urlwrite(B4URL,B4FileName);
%pause(5);
%urlwrite(B8URL,B8FileName);
%pause(5);
%urlwrite(TCIURL,TCIFileName);
try
B4 = imread('TileB04.jp2');

B8 = imread('TileB08.jp2');

TCI = imread('TileTCI.jp2');
catch
result_status = strcat(UID,"failed1")
                result_status2 = 'Too much black in image'
        return
end
%urlwrite(B4URL,B4FileName);
%urlwrite(B8URL,B8FileName);
%urlwrite(TCIURL,TCIFileName);

%B4 = imread('TileB4.jp2');

%B8 = imread('TileB8.jp2');

%TCI = imread('TileTCI.jp2');
         
sizeB4 = size(B4);
format long;

red = 255;
green = 0;
stepsize = 25;
mat_step =1;
c_map = zeros(20,3);
while green<255
	green = green+stepsize
	if green > 255
		green = 255;
	end
	r_color = red/255;
	g_color = green/255;
	c_map(mat_step,1) = r_color;
	c_map(mat_step,2) = g_color;
	c_map(mat_step,3) = 0;
	mat_step = mat_step+1;
end
while red >0
	red = red-stepsize;
	if red<0
		red = 0;
	end
	r_color = red/255;
	g_color = green/255;
	c_map(mat_step,1) = r_color;
	c_map(mat_step,2) = g_color;
	c_map(mat_step,3) = 0;
	mat_step = mat_step+1;
end
%c_map

TileMaxLat =JSONCurDate.north_lat
TileMinLat =JSONCurDate.south_lat
TileMaxLong = JSONCurDate.east_lon
TileMinLong =JSONCurDate.west_lon


FieldMaxLat = JSONDate.FieldMaxLat
FieldMinLat = JSONDate.FieldMinLat
FieldMaxLong =JSONDate.FieldMaxLong
FieldMinLong =JSONDate.FieldMinLong 
    
UID = JSONDate.UID;

    
LatsPerPixel = (TileMaxLat - TileMinLat)/sizeB4(1)
LongsPerPixel = (TileMaxLong - TileMinLong)/sizeB4(1)


    PixelsPerLat = abs(sizeB4(1)/(TileMaxLat - TileMinLat));
PixelsPerLong = abs(sizeB4(2)/(TileMaxLong - TileMinLong));

StartPixelLat = PixelsPerLat*(1-abs(FieldMaxLat-TileMinLat));
StartPixelLat = round(abs(StartPixelLat));



EndPixelLat = PixelsPerLat*(1-abs(TileMinLat- FieldMinLat));
EndPixelLat =  round(abs(EndPixelLat));
if StartPixelLat > EndPixelLat
        temp = EndPixelLat;
        EndPixelLat = StartPixelLat;
        StartPixelLat = temp;
end

if StartPixelLat > 100
        StartPixelLat = StartPixelLat - 100;
else
        StartPixelLat = 0;
end

if EndPixelLat <sizeB4(1)-100
        EndPixelLat = EndPixelLat + 100;
else
        EndPixelLat = sizeB4(1);
end

StartPixelLong = PixelsPerLong*(abs(TileMinLong - FieldMinLong));
StartPixelLong = round(abs(StartPixelLong));


EndPixelLong = PixelsPerLong*abs(TileMinLong - FieldMaxLong);
EndPixelLong = round(abs(EndPixelLong));

if StartPixelLong > EndPixelLong
        temp = EndPixelLong;
        EndPixelLong = StartPixelLong;
        StartPixelLong = temp;
end
if StartPixelLong > 100
        StartPixelLong = StartPixelLong - 100;
else
        StartPixelLong = 0;
end
if EndPixelLong < sizeB4(1) - 100
        EndPixelLong = EndPixelLong+100;
else
        EndPixelLong = sizeB4(1);
end


LatLength = EndPixelLat - StartPixelLat
LongLength = EndPixelLong - StartPixelLong

if StartPixelLat > sizeB4(1) | EndPixelLat > sizeB4(1) | StartPixelLong > sizeB4(1) | EndPixelLong > sizeB4(1)
        result_status2 = 'failed due to unbound start end'
        result_status = strcat(UID,"failed0")
else

	
        clip = [StartPixelLat EndPixelLat StartPixelLong EndPixelLong];
try
        B4 = B4(clip(1):clip(2),clip(3):clip(4));
        B8 = B8(clip(1):clip(2),clip(3):clip(4));
        TCI = TCI(clip(1):clip(2),clip(3):clip(4),:);
catch
result_status = strcat(UID,"failed1")
                result_status2 = 'Too much black in image'
return
end

        B4 = single(B4);
        B8 = single(B8);


        Numerator = (B8 - B4);
        Denominator = (B8 + B4);
        NDVI = Numerator./Denominator;


        SizeNewB4 = size(B4);
        IsNaNMat = isnan(NDVI);
        IsNaNCount =sum(sum(IsNaNMat))
        if(IsNaNCount > SizeNewB4(1)*SizeNewB4(2)*0.5)
                result_status = strcat(UID,"failed1")
result_status2 = 'Too much black in image'
        else

                my_limit=0.5;
low_limit=0.008;
up_limit=0.992;
%----------------------------------------------------------------------
img=TCI;
[m1 n1 r1]=size(img);
%----------------------------------------------------------------------
if r1==3
    my_limit2=0.04;my_limit3=-0.04;
try
a = rgb2ntsc(img);
catch
UID = JSONDate.UID;
result_status = strcat(UID,"failed0")
return
end
%    a=rgb2ntsc(img);
    mean_adjustment=my_limit2-mean(mean(a(:,:,2)));
    a(:,:,2)=a(:,:,2)+mean_adjustment*(0.596-a(:,:,2));
    mean_adjustment=my_limit3-mean(mean(a(:,:,3)));
    a(:,:,3)=a(:,:,3)+mean_adjustment*(0.523-a(:,:,3));
else
    a=double(img)./255;
end
%----------------------------------------------------------------------
mean_adjustment=my_limit-mean(mean(a(:,:,1)));
a(:,:,1)=a(:,:,1)+mean_adjustment*(1-a(:,:,1));
if r1==3
    a=ntsc2rgb(a);
end
%----------------------------------------------------------------------
img=a.*255;
%--------------------calculation of vmin and vmax----------------------
for k=1:r1
    arr=sort(reshape(img(:,:,k),m1*n1,1));
    v_min(k)=arr(ceil(low_limit*m1*n1));
    v_max(k)=arr(ceil(up_limit*m1*n1));
end
%----------------------------------------------------------------------
if r1==3


trans = [ 0.299,  0.596,  0.211; 0.587, -0.274, -0.523; 0.114, -0.322,  0.312 ];

  v_min = v_min*trans;
    %v_min=rgb2ntsc(v_min);
    %v_max=rgb2ntsc(v_max);
        v_max = v_max*trans;
end
%----------------------------------------------------------------------
if abs(v_max(1)-v_min(1))<1e-3
        result_status = strcat(UID,"failed1")
                result_status2 = 'Too much black in image'
        return
end
img=(img-v_min(1))/(v_max(1)-v_min(1));
TCIFilename=strcat(SensingDate,UID);
TCIFilename = strcat(TCIFilename,"_TCI.png");
imwrite(uint8(img.*255),TCIFilename);

NDVI_new = NDVI;


colormap(c_map)
imagesc(NDVI_new, [0 1]);

axis square tight
axis off
                %axis square tight, axis off
                imagename =strcat(SensingDate,UID);
		imagename = strcat(imagename,'MNDVI');
                saveas(1,imagename,'png')


my_limit=0.5;
low_limit=0.008;
up_limit=0.992
i_name =strcat(imagename,'.png');


aa = imread(i_name);

%aa = single(aa);
size_aa = size(aa)
sizeN = size(NDVI)
startaaheight=27;
endaaheight = 900-25;
startaawidth=182;
endaawidth=1200-188;
%if sizeN(1) > size_aa(1)
	aa = aa(startaaheight:endaaheight,startaawidth:endaawidth,:);
	imwrite(aa,i_name);
   
                result_status = strcat(UID,"successful")
        end
end






