#!/usr/bin/env bash
_DEBUG="off" # on/off debug mode.
#========HEADER=====================================================|
#AUTOR
# Jefferson Rocha <lrcjefferson@gmail.com>
#
#PROGRAMA
# Ammyland - Terror em Ammyland
#
#DESCRICAO
# Jogo de terror onde você é o detetive, baseado em text-adventure,
# um categoria de sucesso nos anos 80*. a história é
# fictícia e elaborada pelo autor do programa, porém tem inspiração
# em a lenda do "pântano de Manchac". Divirta-se!
#
#LICENÇA
# MIT
#
#CHANGELOG
# Externo, veja CHANGELOG.txt
#===================================================================|

#=======VARIAVEIS GLOBAIS==========#
nome_versao="Terror em Ammyland, versão Beta 0.4"
dependencias=("ogg123" "pv")
 
#=Inicializando váriaveis
usuario_save=""
nome_do_player=""
#==================================#

#=======TESTES INICIAIS============#
for dep in "${dependencias[@]}"; do   # Dependências estão no sistema?
   if ! type -P "$dep" >/dev/null 2>&1; then
      [[ "$dep" = "ogg123" ]] && dep="vorbis-tools"
      echo -e "\t\E[31;1mVOCÊ NECESSITA DO PACOTE \"$dep\" para continuar.\E[m"
      exit 1
   fi   
done

# Diretório usuarios existe?
[[ ! -d "usuarios" ]] && mkdir "usuarios" 
#==================================#

#=======BIBLIOTECAS================#
source ammyland.conf                       # Arquivo configuração 
source biblioteca/notas.sh
source biblioteca/configuracao.sh          # Configuracao do menu.
source biblioteca/jornais.sh               # função para jornal
source biblioteca/email.sh                 # Email do usuário
source biblioteca/internet.sh              # Internet
source biblioteca/casos.sh                 # função para casos
#===Rooms
source biblioteca/rooms/skyller/lago_saint.sh       #
#==================================#


#=======FUNCOES====================#
# Função de inicio do jogo
function principal(){
 clear
 # Música Inicial
 if [[ "$som" = "1" ]]; then
      ogg123 -r "musicas/ambiente-inicial.ogg" >/dev/null 2>&1 &
 fi
 
 while true; do
     echo -e "----------------------------------------------------------"
     echo -e "Escritório"
     echo -e "$(date  "+%A, %d de %B 1992, %H:%M")\nDetetive: ${nome_do_player^}, Cargo: ${cargo^}, Medalhas: ${medalhas}"
     echo -e "----------------------------------------------------------
${menu_selecao}Config${desliga} | ${menu_selecao}Sair${desliga} | ${menu_selecao}Notas${desliga} | ${menu_selecao}Email${desliga} | ${menu_selecao}Internet${desliga} | ${desliga}${menu_selecao}Jornal${desliga} | ${desliga}${menu_selecao}Casos${desliga}
"
     read -p $'\E[31;1m▶\E[m ' entrada
     entrada="${entrada,,}"   # Tudo em minusculo.
     case "$entrada" in
        config)          configuracao                       ;; # Função Configuracao
        sair)            die; exit 0                        ;; # Mata ogg e sai.
        notas|nota)      die; nota                          ;;
        email|e-mail)    email                              ;; # Chamada ao email
        internet|net)    die; internet                      ;; # Chamada internet
        jornal)          die; jornal                        ;; # Chamada Função
        casos)           die; casos                         ;; # Chamada Função
        ajuda)           die; ajuda                         ;; # Função de ajuda
        *) 
          echo -e "\t\E[31;1mOpção Inválida!\033[m digite ajuda." 
          sleep 1s; clear
         ;; # Chamada Função
     esac
 done
}


function formulario(){
   clear
   echo -e "${azul}Formulário para novos Detetives!\nDigite sua Credencial que pode ser:${desliga} '${vermelho}nick${desliga}' ${azul}ou${desliga} '${vermelho}nome${desliga}'."
   until [[ -n "$nome_do_player" ]]; do # Até que tenha entrada
       read -p $'\n\E[31;1mQual sua credencial Detetive?:\E[m ' nome_do_player
       if ! grep -iwo "$nome_do_player" "$usuario_save" >/dev/null 2>&1; then
          if [[ -n "$nome_do_player" ]]; then
              read -p "Confirma? [SIM/nao]: " confirma
              [[ "$confirma" != "sim" ]] && nome_do_player=""; continue || break
          fi
       else
          echo "Este nome já existe!"
          nome_do_player=""  # Zerando váriavel novamente para voltar loop.
          continue
       fi      
   done
   #ID=$(($(wc -l < "$configuracao_de_usuarios")+1))                              # Gerando ID única.
   nome_do_player="${nome_do_player,,}"                                           # Tudo em minusculo
   usuario_save="usuarios/${nome_do_player}.conf"                                 # Carregando PROFILE do usuário
   medalhas="0"                                                                   # Iniciando Medalhas base em 0
   cargo="recruta"                                                                # Iniciando cargo base para novos usuários
   echo -e "#### NÃO MODIFICAR! ####\n" >> "$usuario_save"                        # Mensagem de aviso.
   # Enviando para o banco de dados.
   echo -e "readonly nome_do_player=\"${nome_do_player}\"\ncargo=\"${cargo}\"\nmedalhas=\"0\"" >> "$usuario_save" 
}


function reconhecimento_do_player(){
   # Dados informativos do player.  
   read -p $'\E[31;1m Olá Detetive, qual sua identificação?: \E[m' nome_do_player
   usuario_save="usuarios/${nome_do_player}.conf"
   if ! grep -oiw "$nome_do_player" "$usuario_save" >/dev/null 2>&1; then
        echo -e "${vermelho}\tDetetive sua credencial não foi encontrada!${desliga}"
        read -p $'\tDeseja criar uma credencial? [SIM/nao]: ' resposta
        resposta="${resposta:=sim}"; resposta="${resposta,,}"                        # enter sim, tudo em minusculo
        [[ "$resposta" != "sim" ]] && { die; echo "Saindo!"; exit 0 ;} || formulario # Chamada funcao
   else
       echo -e "${azul}Credencial Encontrada...${desliga}" | pv -qL "$padrao_escrita"
       source "$usuario_save"             # Chamando Profile do player.
       sleep 0.3s
   fi        
}


#=====FUNÇÕES DE CONFIGURAÇÕES===

function DEBUG(){
   [[ "${_DEBUG}" = "on" ]] && set -x
}


function ctrl_c(){
     die    # Mate ogg123
     echo -e "\nCTRL + C Pressionado, saindo..."
     exit 0 # tchau!
}

# Morre ogg123!
function die(){
    killall ogg123 >/dev/null 2>&1
    sleep 0.3s
}


#=====FUNÇÃO DE AJUDA===

function ajuda(){
cat <<EOF | less
${nome_versao}

O QUE É AMMYLAND?
-----------------
  Ammyland é um jogo fictício com uma historia própria onde você
  é o detetive e precisa desvendar os casos que surgem.
  Muita criptografia, esteganografia e raxa cuca estão ligados
  á neste jogo.


COMO JOGAR?   
-----------
  Na maiora das partes você necessida entrar com comandos para
  o jogo interpretar, entretando salvo exceções em menus por exemplo
  de entrada, você necessita apenas digitar teclas como:
  0 1 2, etc... Assim o sistema entende qual a escolha.


AUTOR
  Escrito por Jefferson Rocha
   
BUGS
  lrcjefferson@gmail.com

LICENÇA
  MIT
 
PARA SAIR PRESSIONE <q>  
      
EOF

if [[ "$em_linha" = "on" ]]; then # Chamou em linha?
   { exit 0 ;}
else
   clear
fi      
}

#==================================#

# Usuário chamou ajuda em linha?
[[ "$1" = "-a" ]] || [[ "$1" = "--ajuda" ]] && { em_linha="on"; ajuda "$@" ;}



# Mensagem Principal do jogo
clear
echo -e \
"
\E[31;1m
~|~ _  _ _ _  _   _  _ _    /\  _ _  _ _   | _  _  _|
 | (/_| | (_)|   (/_| | |  /~~\| | || | |\/|(_|| |(_|
                                         /           
\E[m

"

# Armadilha para o ctrl + c
trap ctrl_c INT

DEBUG # Debugador

# Chamada função para 
# reconheciento do player.
reconhecimento_do_player

# Chamando função principal
principal

