#! /bin/ksh
#-----------------------------------------------------------------------------#
#               Data Assimilation Development - DMD/CPTEC/INPE                #
#-----------------------------------------------------------------------------#
#BOP
#
# !SCRIPT:
#      Configurador do adjBerr
#
# !DESCRIPTION:
#      config_adjBerr.sh: Script para configuracao do ambiente de execucao e 
#                         compilacao da ferramenta de diagnostico e impacto do 
#                         ajuste da Matriz B no desempenho da assimilacao de
#                         dados no GSI 
#
# !REVISION HISTORY: 
# 11 Abril de 2017 - L. F. Sapucci - Versao Inicial modelo (dummy) apenas com 
#                                    a estrutura e componentes basicos.  
#
#EOP
#-----------------------------------------------------------------------------#
#BOC

# Variaveis principais
vars_export(){

# Caminho padrao no sistema
  export usuario=${USER}             # Padrao do Sistema
  export HOME=${HOME}                # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho
  export SUBMIT_HOME=${SUBMIT_HOME}  # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho
  export WORK_HOME=${WORK_HOME}      # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho

# Nome do sistema com a versao do GSI (SMG ou SMR ou RMS por exemplo)
  export nome_sys=eval_gdad
 
# Raiz do sistema onde o GSI esta instalado
  export home_sys=${SUBMIT_HOME}/${nome_sys}
  export work_sys=${WORK_HOME}/${nome_sys}

# Raiz dos pacotes de evaluation e estatistica
  export eval_home=${home_sys}/eval
  export eval_work=${work_sys}/eval
  export estat_home=${eval_home}/stat

# Raiz dos pacotes de diagnostico do GSI
  export diag_home=${eval_home}/diag
  export diag_work=${eval_work}/diag

# Diretorios principais do pacote adjBerr
  export adjBerr_home=${diag_home}/adjBerr
  export adjBerr_work=${diag_work}/adjBerr
  export adjBerr_src=${adjBerr_home}
  export adjBerr_run=${adjBerr_home}

# Diretorios de entrada dos dados para o pacote 


# Diretorios de saida dos resultados 
  export adjBerr_tabe=${adjBerr_work}/tabela
  export adjBerr_figu=${adjBerr_work}/figure
  export adjBerr_bina=${adjBerr_work}/binary

}

# Funcao ajuda
ajuda(){

  print ""
  print " Conteudo: O adjBerr: Ferramenta de diagnostico e impacto do ajuste da Matriz B no "
  print "           desempenho da assimilacao de dados no GSI"
  print ""
  print " Uso.....: ./config_adjBerr.ksh <opcao>"
  print ""
  print " Opcoes..: <opcao> configurar -> configura o adjBerr (cria links e pastas)"
  print "                   compilar -> compila o adjBerr (cria executaveis se necessario)"
  print "                   testcase -> descompacta os arquivos do TestCase"
  print "                   ajuda -> mostra esta ajuda"
  print ""
  print " Exemplos: ./config_adjBerr.ksh configurar"
  print "           ./config_adjBerr.ksh compilar"
  print "           ./config_adjBerr.ksh testcase"
  print "           ./config_adjBerr.ksh ajuda"
  print ""

}

copy_fixed_files(){

  #
  # Copiando arquivos fixos necessários para qualquer rodada, independente do período
  # estes arquivos não estão sob controle de versão pois são binários

  print " "
  print "\033[34;1m > Falta ainda  "
  print "\033[34;1m > Implementar copia dos arquivos para o testcase do \033[31;1m adjBerr\033[m \033[m"

}

# Funcao configurar
configurar(){

# Exportando variaveis
  vars_export

# Exportando variaveis do eval
  source ${eval_home}/config_eval.ksh vars_export 

# Exportanto varaiveis do sistema em avaliacao
  source ${home_sys}/config_${nome_sys}.ksh vars_export

  print ""  
  print ""
  print "\033[34;1m > Bem vindo ao pacote de dignostico do \033[31;1m adjBerr \033[m \033[m"
  print "\033[34;1m > o configurador do adjBerr ira criar pastas \033[m"
  print "\033[34;1m > nos discos scratchout abaixo. \033[m"
  print ""
  print "\033[34;1m > SMG WORK: \033[31;1m${adjBerr_work}\033[m \033[m" 
  print ""
  print "\033[34;1m > Deseja continuar? (S/N)\033[m"
  read resposta

  if [[ ${resposta} = "S" || ${resposta} = "s" ]]
  then

# Mensagem ao usuario
  print ""
  print "\033[34;1m > Configurando o adjBerr ... \033[m"
  print ""

# Criando estrutura de diretorios no scratchout

# Diretorios de entrada 


# Diretorios de saida 
  if test ! -s ${adjBerr_tabe}; then mkdir -p ${adjBerr_tabe}; fi
  if test ! -s ${adjBerr_figu}; then mkdir -p ${adjBerr_figu}; fi
  if test ! -s ${adjBerr_bina}; then mkdir -p ${adjBerr_bina}; fi

  # Copiando arquivos necessários

  copy_fixed_files

  print ""
  print "\033[34;1m > Configuracao adjBerr completa \033[m"

  banner

elif [[ ${resposta} = N || ${resposta} = "n" ]]
then
  print "\033[34;1m > Saindo do configurador. \033[m"
  exit 0
else
  exit 1
fi

}

# Funcao compilar
compilar(){

# Exportando variaveis
  vars_export

# Exportando variaveis do eval
  source ${eval_home}/config_eval.ksh vars_export 

# Exportando varaiveis do sistema em avaliacao
  source ${home_sys}/config_${nome_sys}.ksh vars_export

# Exportando variaves do ambiente de compilacao
  source ${adjBerr_src}/env_adjBerr.sh 
  
# Verificando se esta logado no eslogin01
if [ ${HOSTNAME} != "eslogin01" -a ${HOSTNAME} != "eslogin02" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                       #"
     echo "#                                                                   #"
     echo "# Antes de proceder com a Instalacao logar em um destes servidores: #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin01 -XC                                               #"
     echo "#                                                                   #"
     echo "#  ou                                                               #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     echo "#####################################################################"

     exit 0
fi

#############################################################################
# Compilacao do adjBerr
##############################################################################

  cd ${adjBerr_src}

  echo 
  echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
  echo " Compilando o adjBerr_src:  "
  echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
  echo
  
  ${adjBerr_src}/compile_adjBerr.sh 2>&1 | tee ${adjBerr_src}/compile_adjBerr.log

  if [ -e ${adjBerr_src}/compile_adjBerr.sh  ]
  then # mudar aqui para o nome do arquivo executavel  ${adjBerr_bin}/adjBerr.exe
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "!      Compilacao do adjBerr com Sucesso         !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
  else 
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "! Compilacao do adjBerr falhou !!!!              !"
    echo "! Rever configuracoes ou espaço em disco!        !"
    echo "! Mais informacoes no arquivo compile.log        !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
    exit -9
  fi

  echo -e "\033[34;1m +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \033[m"
  echo -e "\033[34;1m > Compilacao adjBerr completa.# Verifique possiveis erros no arquivo de log, caso o tenha criado. \033[m"
  echo -e "\033[34;1m +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \033[m"

  banner

}

# Funcao testcase
testcase(){

  aloca_testcase

  banner

}

# Funcao aloca tescase
aloca_testcase(){

# Exportando variaveis
  vars_export

# Exportando variaveis do eval
  source ${eval_home}/config_eval.ksh vars_export 

# Exportanto varaiveis do sistema em avaliacao
  source ${home_sys}/config_${nome_sys}.ksh vars_export

  #
  # copiando arquivos fixos (Já devem estar pois são copiados durante a configuracão)
  #

  copy_fixed_files

}

# Final
banner(){

# Exportando variaveis
  vars_export

# Exportando variaveis do eval
  source ${eval_home}/config_eval.ksh vars_export 

# Exportanto varaiveis do sistema em avaliacao
  source ${home_sys}/config_${nome_sys}.ksh vars_export

  print ""
  print "\033[34;1m > Para mais informacoes sobre esta distribuicao do adjBerr, leia o arquivo: \033[m"
  print "\033[34;1m > ${adjBerr_home}/README \033[m"
  print ""

  exit 0

}

# Verifica os argumentos passados junto com o script
if [[ $# = 0 ]]
then
  print ""
  print "\033[31;1m > Nao foi passado nenhum argumento! \033[m"
  ajuda
  banner
elif [[ $# != 1 ]]
then
  print ""
  print "\033[31;1m > Apenas um argumento e requerido! \033[m"
  ajuda
  banner
elif [[ ${1} =	"configurar" ]]
then
  print	""
  print	"\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  configurar
  banner
elif [[ ${1} = "compilar" ]]
then
  print ""
  print "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  compilar
  banner
elif [[ ${1} = "testcase" ]]
then
  print ""
  print "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  testcase
  banner
elif [[ ${1} = "vars_export" ]]
then
  vars_export
elif [[	${1} =  "ajuda" ]]
then
  print	""
  print	"\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  ajuda
  banner
else
  print ""
  print "\033[31;1m > Opcao desconhecida: \033[31;1m${1}\033[m \033[m"
  ajuda
  banner
fi
