#!/bin/bash



if test x"$1" = x--help ; then
    echo AYUDA
    exit 0
    fi

if test x"$1" = x--version ; then
    echo download.sh version 3
    exit 0
    fi



bajar() { 

    echoerr bajando $SERVER/$DIR/$NAME 
    mv $DOWNLOAD/$NAME $DOWNLOAD/$NAME.viejo.$RANDOMNA;  2>/dev/null
    wget --header="Host: $SERVER" --no-check-certificate -O  $DOWNLOAD/$NAME $NSOUIP/$DIR/$NAME; test 0 = 0; 
    # en el caso de simusol el apache con ese IP funciona, tiene un link a simusol.org
    chmod a+w $DOWNLOAD/$NAME; test 0 =  0;
    touch $DOWNLOAD/$NAME; test 0 = 0 ; # unzip dates files in 1999!
    echo $DOWNLOAD/$NAME

# al redireccionar los otros con echoerr, y ya que wget manda tambien a stderr, lo que sale puede ser capturado para su uso

#	/home/dsa/var/cache/summapack/exprtk.zip.3


    if test ! -s  $DOWNLOAD/$NAME  ; then
	       echoerr ERROR Internet falla bajando  $DOWNLOAD/$NAME, archivo recibido vacio.
	       rm -f  $DOWNLOAD/$NAME
	       echo ""
	       exit;
	     else 
		 rm -f  $DOWNLOAD/$NAME.md5 ;
                 if test ! -s $DOWNLOAD/$NAME.md5.new ; then
	           md5sum -t    $DOWNLOAD/$NAME  >  $DOWNLOAD/$NAME.md5 ; 
	           MD5BAJ=`cat  $DOWNLOAD/$NAME.md5 | cut -d' ' -f1` ;
	           MD5OK=`cat  $DOWNLOAD/$NAME.md5.new 2>/dev/null| cut -d' ' -f1` 
	           echo md5 $MD5OK md5new $MD5BAJ 
	           if test x$MD5OK != x$MD5BAJ ; then 
	              #echo EL archivo $DOWNLOAD/$NAME bajo mal, lo renombro
	              mv -f  $DOWNLOAD/$NAME $DOWNLOAD/$NAME.mal 2>/dev/null
		      echoerr ERROR:  Archivo mal bajado renombrado a: $DOWNLOAD/$NAME.mal;  MD5 no es igual al sitio
		      echo ""
		      exit;
	              fi;
	           echoerr ADVERTENCIA: No se obtuvo MD5 del sitio, no se comprobo que lo bajado este OK.
  	           chmod a+w $DOWNLOAD/$NAME ;  chmod a+w $DOWNLOAD/$NAME.md5 ; chmod a+w $DOWNLOAD/$NAME.md5.new ; echo ''; 
	           rm -f $DOWNLOAD/$NAME.md5.new  2>/dev/null;
                   echo  $DOWNLOAD/$NAME 
                   exit 
	       fi
            fi; 

} 



echoerr() { printf "%s\n" "$*" >&2; }
echoerr "Usage: download [NAME] [NOCHECK] [SERVER] [DIR] [DESTDIR]"


echoerr En nombre debe ponerse el nombre completo del archivo, este programa no revisa la cuestion de last/UNSTABLE/Viejas versiones o tipos de paquetes o extensiones. En el caso de estar en simusol.org, verifica md5
echoerr Este programa a diferencia del define download del makefile no desempaqueta ni instala

RANDOMNA=`mktemp -d |sed -e's/\n//'|sed -e's/^\/tmp\/tmp\.//'`

# primero debe ver si lo que se quiere bajar esta en algun posible DOWNLOAD
# luego ver si hay otro mas nuevo en el server con md5 (caso simusol)
# si es root o si puede escribir en /var/cache/summapack, hacerlo

NAME=$1
NOCHECK=$2 # si hay version local no verifica en el server si hay mas nuevo, sin eso seria un update
SERVER=$3
DIR=$4
DESTDIR=$5


if test x"$NAME" = x"" ; then
    echoerr Debe tener al menos un argumento, con el nombre del paquete que desea bajar
    echo ""
    exit
fi

if test x"$SERVER" = x"" ; then
    SERVER=simusol.org
    fi
if test x"$DIR" = x"" ; then
    DIR=downloads
    fi    

#./download.sh distro.sh 2>/dev/null
#./download.sh exprtk.zip partow.net  2>/dev/null
#WWHO=$(shell who am i | awk -F ' ' '{print $1}')
WWHO=`whoami | awk -F ' ' '{print $1}'`
#LC=`whoami|wc -l`
#if test x"$LC" = x1 ; then 
        USERNAME=$WWHO
#      fi
#homedir=$(shell getent passwd "$USERNAME" | cut -d: -f6 )
homedir=`cat /etc/passwd |grep "$USERNAME" | cut -d: -f6`	
#if test x"$PREFIX" = x ; then
#   PREFIX=$homedir
#fi
VCS=/var/cache/summapack
REDLOADS="$DESTDIR$VCS $VCS $DESTDIR$homedir$VCS $homedir$VCS"
if test x"$DESTDIR" = x ; then
  REDLOADS="$VCS $homedir$VCS"
fi

# BUSCA SI ESTA EL ARCHIVO PEDIDO, entre los lugares disponibles

SEC=100000000000000
ESPARAMI=''
LAMASNUEVA=''
LAMASNUEVADIR=''
for RR in $REDLOADS ; do
      echoerr ==========================================
      echoerr BUSCANDO ULTIMO EN: $RR
      if test -e $RR/$NAME ; then
	  CANDIDATA=$RR/$NAME
          SECONDS=$(($(date +%s) - $(date +%s -r $CANDIDATA)))
          echoerr ESTA $CANDIDATA - $SECONDS
	  if test $SECONDS -lt $SEC ; then   # no puedo usar $NT debiera asegurar un archivo muy viejo
	      SEC=$SECONDS
	      LAMASNUEVA=$CANDIDATA
	      LAMASNUEVADIR=$RR
	        echo POR AHORA LA MAS NUEVA $LAMASNUEVA : $SECONDS
	      fi
         # else
	 #  echoerr NOESTA $RR/$NAME
	  ESTAENHOME==`echo $CANDIDATA | grep '/home'`
  	  ESTAENROOT=`echo $CANDIDATA | grep '/home'`
	  echo ES $ESPARAMI
         fi	  
    done
if test x"LAMASNUEVA" != x ; then    
    echo LA MAS NUEVA QUE TENGO: $LAMASNUEVA - $SEC
else
    echo No tengo version local.
fi

#VER AHORA SI ESTA  y si no hay bandera NOCHECK

# HAY y no check distinto de vacio -> salgo e informo
if test x"$NOCHECK" != x -a x"$LAMASNUEVA" != x ; then  # caso la que tenemos ya esta y no hay que comprobar!
    echo $LAMASNUEVA
    exit
    ##################################################################################################
fi


############ HAY QUE COMPROBAR 

# buscar directorio de bajada que sea escribible, preferible en /var

# crear en var si se puede

DOWNLOAD=$DESTDIR$VCS

if test ! -d  $DOWNLOAD ; then
    if test \( ! -d /var -a -w / \)  -o \( ! -d /var/cache -a -w /var \) -o -w /var/cache  ; then 
	mkdir -p $DOWNLOAD
    fi
fi


# ELEGIMOS DOWNLOAD, si es var y la ultima esta en HOME pasamos a VAR
if test -d  $DOWNLOAD -a -w $DOWNLOAD -a \( -w $DOWNLOAD/$NAME -o ! -e $DOWNLOAD/$NAME \) ; then
    echoerr si se puede escribir en $DOWNLOAD
    # Si lo mas nuevo esta en HOME , y se puede escribir en /var, pasarlo a var junto con md5 si esta
    if test  x"$ESTAENHOME" != x ; then
	mv $DOWNLOAD/$NAME $DOWNLOAD/$NAME.movviejo.$RANDOMNA;  2>/dev/null
	mv $LAMASNUEVA $DOWNLOAD
	LAMASNUEVA=$DOWNLOAD/$NAME
	if test -e $LAMASNUEVA.md5 ; then
	    echoerr Se mueve la ultima version al repo central
	    if test -e $DOWNLOAD/$NAME.md5 ; then
     	      mv $DOWNLOAD/$NAME.md5 $DOWNLOAD/$NAME.md5.movviejo.$RANDOMNA;  2>/dev/null
              fi
            mv $LAMASNUEVA.md5 $DOWNLOAD
	    fi 
    fi 
  else
    DOWNLOAD=$DESTDIR$homedir$VCS
    mkdir -p $DOWNLOAD
    
fi    


PROBO=''
#SOLO habra estos md5 si es simusol.org, o probamos????
echo $SERVER $NOCHECK
echoerr USER $USERNAME HOME $homedir DOWNLOAD $DOWNLOAD
        
# a partir de aca seguro usamos internet

NSOUIP=`host $SERVER 8.8.8.8 | grep "$SERVER has address" | awk -F' ' '{print $4}'`;
echoerr $NSOUIP - $DIR - $NAME - $RANDOMNA

	# sacar esto, que verifique siempre!, para que sirva para otros.


   if test  ! -e $LAMASNUEVA ; then
       bajar;
       exit
   fi


   # a partir de aqui hay local
   
  echo BAJANDO MD5   
  rm -f  $DOWNLOAD/$NAME.md5.new
  wget --header="Host: $SERVER" --no-check-certificate -c -O  $DOWNLOAD/$NAME.md5.new $NSOUIP/$DIR/$NAME.md5 
  if test ! -s $DOWNLOAD/$NAME.md5.new ; then
      echoerr ERROR: NO pudo bajar $DOWNLOAD/$NAME.md5.new;
      # si esta en simusol y no hay md5 es error,   REVISAR SHELLS
      # mensaje de salida de error
      # exit -1, mejor no que siga adelante, falso hay sitios sin md5
      echo Baja porque no encontro MD5 para bajar
      bajar   # seria raro pedir test y no bajar si no se puede
      exit;
  else    
     if test  ! -e $LAMASNUEVAMD5 ; then    #no hay md5 local, hay que calcularlo
      echo CALCULANDO MD5 de preexistente 
      md5sum -t   $LAMASNUEVA > $DOWNLOAD/$NAME.md5 ;  # solo escribe en DOWNLOAD
      LAMASNUEVAMD5=$DOWNLOAD/$NAME.md5      
     else
      LAMASNUEVAMD5=$LAMASNUEVA.md5
     fi
  fi

#if test x"$SERVER" = xsimusol.org -a x"$BAJAR" = x1 ; then    # ya miro esto: -a x"$NOCHECK" = x 
  ############################################################ CHECKEO,  bajo MD5, 	    
 
# a partir de aca hay local , md5 local , md5 bajado(neuvo),

MD5NEW=
if test ! -s $DOWNLOAD/$NAME.md5.new ; then
	MD5NEW=`cat $DOWNLOAD/$NAME.md5.new 2>/dev/null| cut -d' ' -f1`
        fi

MD5=`cat $LAMASNUEVAMD5 2>/dev/null| cut -d' ' -f1`


	

echo "MD5  md5 ($LAMASNUEVAMD5) $MD5 md5new ($DOWNLOAD/$NAME.md5.new) $MD5NEW"

# si hay md5.new (tambien hay paquete, mas arriba), y ( no hay paquete local o no hay md5 local o el que hay es diferente al servidor ) => baja
 if test  x$MD5 != x$MD5NEW ; then
	     bajar
	     exit
 else
      touch  $LAMASNUEVA   # es como si la baje recien
      echo $LAMASNUEVA
fi

 echoerr No pude bajar
 echo ""

exit;
 
    #elif test x"$BAJAR" != x ; then    # sea 1 o vacio es lo mismo debe bajar 


echo LLEGUE MAL


exit
#################################################################################################	 
homedir=$(shell getent passwd "$(USERNAME)" | cut -d: -f6 )

if test x"$2" = x; then
    PREFIX=/usr/local
else
    PREFIX=$2
    # MUY PELIGROSO, para que?
    #   echo BORRANDO TODO $1
    #   rm -rf $DESTDIR
fi     


if test x"$1" = x; then
    DESTDIR=
else
    DESTDIR=$1
    # MUY PELIGROSO, para que?
    #   echo BORRANDO TODO $1
    #   rm -rf $DESTDIR
fi     
   
echo DESTDIR ${DESTDIR} PREFIX ${PREFIX}

if test -e $DESTDIR/bin/distro.sh ; then
    echo Summapack ya esta instalado, borrar  $DESTDIR/bin/distro.sh
    exit
fi




#USERXA=$(shell echo ${XAUTHORITY} | awk -F'/'  '{print $$3}' )
# ojo requiere instalar
# no va mas desde ubuntu 17.10
### seguro que /tmp/usuario falla
#USERXA=$(shell ls -l /tmp/usuario  2>/dev/null | awk -F' ' '{print $$3}' )
#USERLN=$(shell echo ${LOGNAME} )
#USERSU=$(shell echo ${SUDO_USER} )
#USERU=$(shell echo ${USER} )

#USERACTUAL=$(shell id -un)
#
# falla porque Make viene de un tar que pone el usuario por numero del que lo hizo
#USERBASE2=$(shell who | awk '{print $$1}' )
# si hay varios usuarios logeados es un lio
# varios sudos invalidan SUDO_USER y LOGNAME
# terminales en X11 invalidan LOGNAME
# XAUTH EN X11 y SUDO_USER en terminal (cruzar dedos que no sean sudo sudo)


#ifeq ($(USERXA),)
#        USERR=$(shell echo $(USERSU) )
#else
#        USERR=$(USERXA)
#endif

#ifeq ($(USERR),)
#        USUARIO=$(shell echo $(USERU) )
#else
#        USUARIO=$(USERR)
#endif

#WWHO=$(shell who am i | awk -F ' ' '{print $$1}')
# se repite para 0
#LC=$(shell  who am i|wc -l)


#ifeq ($(LC),1)
#        USUARIO=$(WWHO)
#endif

#USERBASE=$(USUARIO)
#USERNAME=$(USUARIO)
##USERNAME=${USER}
##USERNAME=$(shell whoami)
##$(info USERNAME $(USERNAME))
#homedir=$(shell getent passwd "$(USERNAME)" | cut -d: -f6 )

##$(info USERNAME $(USERNAME))

#aqui sigue a simusol, ahora quizas lo logico seria instalar todo en /usr/local siempre
# que se es root
#USERID=$(shell $(shellpath) id -u)
#USERID=$(shell id -u)
#NUID=1
# ojo aparecera nuevouid solo si se esta llamando esto con sudo.sh en cygwin
NUID=$(shell $(shellpath) /bin/echo $$NUEVOUID)


# en cygwin tambien
# VER QUE PASa EN CYGWIN SIN SUDO
#VEROID=$(USERID)
#ifeq ($(NUID),-1)
#  VEROID=0
#endif
#ifeq ($(VEROID),1)
#                $(info Running as root, No correr con sudo, cuando necesite el programa lo hara.)
#                $(shell exit 2); 
#endif

#$(info HOMEDIR $(homedir)) 
#$(info XA $(USERXA) - $(USERLN) - $(USERSU) -  $(USERU) - $(USERR) -$(USEREBASE))
#$(info User Id is $(USERID) - $(USERACTUAL) - ${USER} - Su ${SUDO_USER} - BASE $(USERBASE) -  USERNAME  $(USERNAME))
#$(info User ID: $(VEROID))

    
#NAME=summapack-last.tar.gz  
#SOU=http://simusol.org/downloads/${NAME}
## esto porque adentro de jaula de open build suse no anda el resolv.conf
#NSOUIP=`host simusol.org 8.8.8.8 | grep 'simusol.org has address' | awk -F' ' '{print $4}'`
#BASETMP=`mktemp -d |sed -e's/\n//'|sed -e's/^\/tmp\///'`
#mkdir -p /tmp/${BASETMP}
#rm -rf /tmp/${BASETMP}/*
#wget --no-check-certificate  -P  /tmp/${BASETMP} ${NSOUIP}/downloads/${NAME}
#cp ../summapack-2017.1.13.R901.tar.gz  /tmp/${BASETMP}/${NAME}
#cd /tmp/${BASETMP}
#tar -zvxf /tmp/${BASETMP}/${NAME}
#cd summapack-2*   #en el año 3000 cambiar!!!
#make DESTDIR=$DESTDIR PREFIX=$PREFIX DEBUG=1  install



#ifneq ($(shell test -d  $(DOWNLOAD) -a -w $(DOWNLOAD) && echo -n yes),yes)
#   $(info  ADVERTENCIA DOWNLOAD: $(DOWNLOAD) no esta creado o no es escribible, summapack es el unico que lo crea en zona que requiere root)
#    DOWNLOAD=$(DESTDIR)$(HOME)/var/cache/summapack
#    $(info  Sera creado en $(DOWNLOAD))
#    $(shell $(shellpath) mkdir -p $(DOWNLOAD) 2>/dev/null)
#    endif
#    #no vacio a download porque hay partes en que se hace rm sobre el y no se si tienen en cuenta que puede estar vacio

#ifeq ($(shell test x"$(VEROID)" = x0 && echo -n yes),yes)
#	DOWNLOAD=$(PREFIXDOWN)/summapack
#        $(info  VEROID $(VEROID) DOWN $(DOWNLOAD)  )
#        $(shell $(shellpath) mkdir -p $(DOWNLOAD) 2>/dev/null)
#        $(shell $(shellpath) chmod -R a+w $(DOWNLOAD) 2>/dev/null)
#        $(shell $(shellpath) chmod -R a+r $(DOWNLOAD) 2>/dev/null)
#    endif


#    	echo bajando exprtk.zip
#        mkdir -p $(DOWNLOAD)
#	NSOUIP=`host partow.net 8.8.8.8 | grep 'partow.net has address' | awk -F' ' '{print $$4}'`;\
#	wget --no-check-certificate -P  /tmp/${BASETMP} $$NSOUIP/downloads/exprtk.zip; echo 0; 
#       chmod a+w $(DOWNLOAD)/exprtk.zip; echo 0;
#        touch $(DOWNLOAD)/exprtk.zip; echo 0; # unzip dates files in 1999!


	


#		@echo "$6 esta en: >$1<"
#	if test x"$1" = x ; then \
#	 touch INSTALA_companion ;\
#	 echo Instalar $6; \
#	 mkdir -p $2  2>/dev/null; \
#	 rm -f  $2/$3.md5.new ;\
#	 wget --no-check-certificate -c -O  $2/$3.md5.new  $4.md5 ; \
#	 NOMBRE=$3 ; \
#	 NOMBREDIR=$4 ; \
#	 if test ! -s  $2/$3.md5.new ; then\
#	    echo "Internet (o sin permiso: sudo) falla bajando $4.md5" ;\
#	    rm -f $2/$3.md5.new ;\
#	    NOMBRE=`echo $3 | sed -e 's/UNSTABLE/last/'`;\
#	    NOMBREDIR=`echo $4 | sed -e 's/UNSTABLE/last/'`;\
#	    wget --no-check-certificate -c -O  $2/$$NOMBRE.md5.new  $$NOMBREDIR.md5 ; \
#	    if test ! -s  $2/$$NOMBRE.md5.new ; then\
#	      echo "Internet (o sin permiso: sudo) falla bajando $$NOMBREDIR.md5" ;\
#	      rm -f $2/$$NOMBRE.md5.new;\
#	    fi; \
#	 fi; \
#	 MD5NEW=`cat $2/$$NOMBRE.md5.new 2>/dev/null| cut -d' ' -f1` ;\
#	 MD5=`cat $2/$$NOMBRE.md5 2>/dev/null| cut -d' ' -f1`;\
#	 echo md5 $$MD5 md5new $$MD5NEW ;\
#	 if test \( -s $2/$$NOMBRE.md5.new -a \
#                  \( ! -e $2/$$NOMBRE -o  \
#                    ! -e $2/$$NOMBRE.md5 -o \
#                      x$$MD5 != x$$MD5NEW \) \
#                \) ; then \
#	    echo Bajando  $$NOMBREDIR ;\
#	    mkdir -p /tmp/saved  2>/dev/null; \
#	    chmod a+w /tmp/saved; \
#	    mv -f $2/$$NOMBRE /tmp/saved 2>/dev/null;\
#	    rm -f $2/$$NOMBRE; \
#	    wget --no-check-certificate  -P $2 $$NOMBREDIR; \
#	    if test ! -s  $2/$$NOMBRE ; then\
#	       echo Internet falla bajando $$NOMBREDIR ;\
#	       rm -f $2/$$NOMBRE;\
#	     else \
#	       rm -f   $2/$$NOMBRE.md5 ;\
#	       md5sum -t   $2/$$NOMBRE > $2/$$NOMBRE.md5 ; \
#	       MD5BAJ=`cat  $2/$$NOMBRE.md5 | cut -d' ' -f1` ;\
#	       MD5OK=`cat $2/$$NOMBRE.md5.new 2>/dev/null| cut -d' ' -f1`;\
#	       echo md5 $$MD5OK md5new $$MD5BAJ ;\
#	       if test x$$MD5OK != x$$MD5BAJ ; then \
#	          echo EL archivo $$NOMBREDIR bajo mal, lo renombro;\
#	          mv -f  $2/$$NOMBRE $2/$$NOMBRE.mal 2>/dev/null ;\
#	       fi;\
#	       chmod a+w $2/$$NOMBRE ;  chmod a+w $2/$$NOMBRE.md5 ; chmod a+w $2/$$NOMBRE.md5.new ; echo ''; \
#	       rm -f $2/$$NOMBRE.md5.new  2>/dev/null;\
#	    fi; \
#	 else \
#	    echo No bajo: $$NOMBREDIR ;\
#	 fi; \
#       if test x${BASETMP} != x; then \
#	   if  test -e $2/$$NOMBRE ; then \
#	     echo Instalando $6;\
#           if test x"$5" != x; then \
#      rm -rf /tmp/${BASETMP} ; \
#             mkdir -p /tmp/${BASETMP} ;\
#	      cd /tmp/${BASETMP} ;\
#	      tar -zxvf $2/$$NOMBRE >/dev/null ; \
#	      DIRBU=`echo $5*| sed -e 's/ //g'` ;\
#	      if test -d $$DIRBU  ; then   \
#		    echo Encontro directorio  $$DIRBU con raiz $5; \
#	            cd $5* ; \
#	 	    $7 ;\
#	            echo $6 fue instalado en ${PREFIX};\
#	         else \
#	            echo "No encontro directorio con raiz $5, encontro $$DIRBU" ;\
#	      fi; \
#	      fi; \
#	     else \
#	      echo No puede bajar $6 ;\
#	     fi;\
#	 else \
#	   echo No hay BASETMP, no puedo descomprimir ;\
#	 fi;\
#	else \
#	   echo No se instala: $6 ya esta instalado en $1;\
#	fi
