#!/bin/bash

NOMECONTAINER="oraclexe21c"

docker_repo="urbancompasspony/centosoracle:latest"
imagem="oraclexe21c"

CustmN2="local_ip"
CustmN3="servidor_dns"
CustmN4="password"
CustmN5="lstn_port:"
CustmN6="charset"
CustmN7="db_domain"
CustmN8="em_exp_port"
CustmN9="reinstalar?"
CustmN10=""

VALUE2="0.0.0.0"
VALUE3="8.8.4.4"
VALUE4="#A1234abc"
VALUE5="1521"
VALUE6="WE8MSWIN1252 or AL32UTF8"
VALUE7="ftagricola"
VALUE8="5500"
VALUE9="nao"
VALUE10=""

export NOMECONTAINER docker_repo imagem
export CustmN2 CustmN3 CustmN4 CustmN5 CustmN6 CustmN7 CustmN8 CustmN9 CustmN10
export VALUE2 VALUE3 VALUE4 VALUE5 VALUE6 VALUE7 VALUE8 VALUE9 VALUE10

source /root/.index.sh

if [ -f /tmp/common-functions.sh ]; then
  source /tmp/common-functions.sh
else
  echo "ERRO: common-functions.sh não encontrado!"
  exit 1
fi

function set_mkdir {
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/{log,adump,dbs,oradata,root,netadmin,sysconfig}

  sudo touch /srv/containers/"$NOMECONTAINER"/root/.bashrc
  sudo touch /srv/containers/"$NOMECONTAINER"/netadmin/sqlnet.ora
  sudo touch /srv/containers/"$NOMECONTAINER"/netadmin/listener.ora
  sudo touch /srv/containers/"$NOMECONTAINER"/netadmin/tnsnames.ora
  sudo touch /srv/containers/"$NOMECONTAINER"/sysconfig/oracle-xe-21c.conf

  sudo touch /srv/containers/"$NOMECONTAINER"/log/listener.log
  sudo chmod 777 /srv/containers/"$NOMECONTAINER"/log/listener.log
:; }

function docker_create {
  local ip_regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"

  # Se NAO for numerico, execute como host!
  if [[ ! "$VALUE2" =~ $ip_regex ]]; then

    docker run -d --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
    --network host \
    --no-healthcheck --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro 
    --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
    -e ORACLE_PWD="$VALUE4" \
    -v /srv/containers/"$NOMECONTAINER"/sysconfig:/etc/sysconfig \
    -v /srv/containers/"$NOMECONTAINER"/root/.bashrc:/root/.bashrc \
    -v /srv/containers/"$NOMECONTAINER"/dbs:/opt/oracle/dbs \
    -v /srv/containers/"$NOMECONTAINER"/oradata:/opt/oracle/oradata \
    -v /srv/containers/"$NOMECONTAINER"/netadmin:/opt/oracle/homes/OraDBHome21cXE/network/admin \
    -v /srv/containers/"$NOMECONTAINER"/adump:/opt/oracle/admin/XE/adump \
    -v /srv/containers/"$NOMECONTAINER"/log:/opt/oracle/product/21c/dbhomeXE/network/log \
    "$docker_repo"

    return
  fi

  docker run -d --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
  --network macvlan --ip="$VALUE2" --dns="$VALUE3" \
  --no-healthcheck --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro \
  --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
  -e ORACLE_PWD="$VALUE4" \
  -v /srv/containers/"$NOMECONTAINER"/sysconfig:/etc/sysconfig \
  -v /srv/containers/"$NOMECONTAINER"/root/.bashrc:/root/.bashrc \
  -v /srv/containers/"$NOMECONTAINER"/dbs:/opt/oracle/dbs \
  -v /srv/containers/"$NOMECONTAINER"/oradata:/opt/oracle/oradata \
  -v /srv/containers/"$NOMECONTAINER"/netadmin:/opt/oracle/homes/OraDBHome21cXE/network/admin \
  -v /srv/containers/"$NOMECONTAINER"/adump:/opt/oracle/admin/XE/adump \
  -v /srv/containers/"$NOMECONTAINER"/log:/opt/oracle/product/21c/dbhomeXE/network/log \
  "$docker_repo"
}

function docker_extras {
  echo -e "LISTENER_PORT=$VALUE5
EM_EXPRESS_PORT=$VALUE8
CHARSET=$VALUE6
DBFILE_DEST=
DB_DOMAIN=$VALUE7
SKIP_VALIDATIONS=true" | sudo tee /srv/containers/"$NOMECONTAINER"/sysconfig/oracle-xe-21c.conf

  echo -e "
# User specific aliases and functions for Oracle!
umask 022
export ORAENV_ASK=NO
export ORACLE_SID=XE
export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE
export PATH=$PATH:/opt/oracle/product/21c/dbhomeXE/bin
  #. /opt/oracle/product/21c/dbhomeXE/bin/oraenv

alias listener='lsnrctl status'
alias lservice='lsnrctl service'
alias sqlplus='sqlplus system/$VALUE4@localhost:1521/XE.$VALUE7'
alias rman0='rman target sys/$VALUE4@localhost:1521/XE.$VALUE7'
alias oraclestart='/etc/init.d/oracle-xe-21c start'
alias oraclenew='/etc/init.d/oracle-xe-21c configure'
alias help0='cat /root/.bashrc'

echo ' '
echo '# # # Checking System'
echo 'listener: alias to check listener and oracle process status'
echo 'lservice: alias to check listener and oracle process status'
echo 'sqlplus: alias to connect to OracleDB'
echo ' '
echo '# # # Oracle Control'
echo 'oraclestart: alias to start OracleDB manually'
echo 'oraclenew: alias to configure a NEW OracleDB if none exist'
echo ' '
echo '# # # Accessing Tables with SQL Plus'
echo 'Show Tables: SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; '
echo 'Show Tablespaces: SELECT TABLESPACE_NAME FROM USER_TABLESPACES; '
echo 'Show PDB: SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID; '
echo 'Show All Tables: SELECT table_name, owner, tablespace_name FROM all_tables; '
echo ' '
echo '# # # Maintenance'
echo 'rman0: alias to start Recovery Manager'
echo 'VALIDATE DATABASE;'
echo 'VALIDATE CHECK LOGICAL DATABASE;'
echo 'BACKUP VALIDATE DATABASE ARCHIVELOG ALL;'
echo 'BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL;'
echo ' '
echo 'help0: Re-run this page!'
echo ''
" | sudo tee /srv/containers/"$NOMECONTAINER"/root/.bashrc

if [ "$VALUE9" = sim ]; then
  docker exec "$NOMECONTAINER" bash -c '
  echo "XE:/opt/oracle/product/21c/dbhomeXE:N" | tee /etc/oratab
  chown -R oracle:oinstall /opt/oracle/admin
  cat > /tmp/startup.sql << 'EOF'
STARTUP;
ALTER PLUGGABLE DATABASE ALL OPEN;
EXIT;
EOF
  su - oracle -c "
export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE
export ORACLE_SID=XE
export PATH=/opt/oracle/product/21c/dbhomeXE/bin:\$PATH
sqlplus / as sysdba @/tmp/startup.sql"
'
  docker restart "$NOMECONTAINER"
else
  docker exec "$NOMECONTAINER" bash -c '
  # Definindo as permissões para o usuário oracle (UID 54321)
  chown -R 54321:54321 /opt/oracle/oradata/
  chown -R 54321:54321 /opt/oracle/admin/XE
  chown -R 54321:54321 /opt/oracle/homes/OraDBHome21cXE/network/admin
  chown -R 54321:54321 /opt/oracle/product/21c/dbhomeXE/network/log
  chown -R 54321:54321 /opt/oracle/dbs
  chmod -R 755 /opt/oracle/oradata/
  chmod -R 755 /opt/oracle/admin/XE
  chmod -R 755 /opt/oracle/dbs
  chmod -R 755 /opt/oracle/product/21c/dbhomeXE/network/log
  chmod -R 755 /opt/oracle/homes/OraDBHome21cXE/network/admin
  echo ""
  echo "Nenhum banco foi iniciado pois a opcao REINSTALAR? foi definida como NAO."
  echo "Ignore esta mensagem se deseja criar um novo banco de dados OracleDB!"
  sleep 1
  '
fi

:; }

execute_main

exit 0
