#!/bin/bash
#
# MODELO da recarga diaria. Copie para o diretorio da implantacao do cliente
# (fora do repositorio) e ajuste BASE e MAPA. Duas fases, nesta ordem:
#
#   1. PROVISIONAR  -- empresa nova no ERP ganha projeto e chave proprios
#   2. CARREGAR     -- todas as empresas do arquivo de chaves
#
# A ordem importa: o provisionador ACRESCENTA ao arquivo de chaves, e o
# carregador le esse mesmo arquivo. Empresa criada hoje no ERP entra na carga
# desta noite, sem ninguem tocar em nada.
#
#   $BASE/recarga-diaria.sh            # provisiona e carrega
#   $BASE/recarga-diaria.sh --dry-run  # so mostra, nao cria nem envia
#
# Este arquivo e CONFIGURACAO DE IMPLANTACAO, nao produto: mora fora do
# repositorio porque aponta para credenciais desta maquina.
set -uo pipefail

BASE=/opt/contextia          # <-- diretorio da implantacao deste cliente
SDK=$BASE/sdk
COLETA=$SDK/coleta
LOGS=$BASE/logs
CHAVES=$BASE/chaves.tsv
MAPA=$COLETA/mappings/<cliente>.json
PY=/usr/local/bin/python3.8
MANTER_DIAS=21

mkdir -p "$LOGS"
LOG="$LOGS/recarga-$(date +%Y%m%d-%H%M%S).log"
NOVOS="$LOGS/.novos.$$"

exec 9>"$BASE/.recarga.lock"
if ! flock -n 9; then
    echo "$(date '+%F %T') recarga anterior ainda rodando; esta execucao foi ignorada." >> "$LOGS/recarga-pulada.log"
    exit 0
fi
trap '/bin/rm -f "$NOVOS"' EXIT

ANTES=$(grep -cv '^#' "$CHAVES" 2>/dev/null || echo 0)

{
    echo "===== recarga iniciada em $(date '+%F %T %Z') ====="
    . "$BASE/env-origem.sh"

    echo
    echo "--- fase 1: empresa nova ganha projeto e chave ---"
    if [ -f "$BASE/env-tenant.sh" ]; then
        . "$BASE/env-tenant.sh"
        cd "$COLETA" && $PY provisionar.py --mapping="$MAPA" --source=generic \
            --arquivo="$CHAVES" "$@"
        echo "provisionamento saiu com $?"
    else
        echo "SEM env-tenant.sh: nao da para criar projeto de empresa nova."
        echo "Empresa criada no ERP ficara de fora ate alguem provisionar a mao."
    fi

    echo
    echo "--- fase 2: carga ---"
    CONTEXTIA_MAPPING="$MAPA" bash "$COLETA/carregar-todas.sh" "$CHAVES" "$@"
    echo "carregador saiu com $?"
    echo "===== recarga terminada em $(date '+%F %T %Z') ====="
} >> "$LOG" 2>&1

DEPOIS=$(grep -cv '^#' "$CHAVES" 2>/dev/null || echo 0)
CRIADOS=$(( DEPOIS - ANTES ))

CODIGO=0
grep -q 'falharam: 0' "$LOG" || CODIGO=1
grep -qE 'FALHOU ao criar (projeto|chave)' "$LOG" && CODIGO=1
grep -q 'SEM env-tenant.sh' "$LOG" && CODIGO=1

{
    echo "ultima recarga ....: $(date '+%F %T %Z')"
    echo "resultado .........: $([ "$CODIGO" -eq 0 ] && echo OK || echo FALHOU)"
    grep -E '^  carregadas:' "$LOG" | tail -1
    grep -E 'Registros enviados' "$LOG" | awk -F: '{s+=$2} END {printf "  registros enviados: %d\n", s}'
    grep -E 'Registros removidos' "$LOG" | awk -F: '{s+=$2} END {printf "  registros removidos: %d\n", s}'
    echo "empresas no total .: $DEPOIS"
    if [ "$CRIADOS" -gt 0 ]; then
        echo
        echo "*** $CRIADOS EMPRESA(S) NOVA(S) GANHARAM PROJETO NESTA EXECUCAO ***"
        grep -E '^  [0-9]+ +OK  projeto=' "$LOG" | sed 's/^/  /'
        echo
        echo "  CONFIRA se alguma e cadastro de teste. A lista excluded_scopes do"
        echo "  mapeamento e estatica: empresa de teste criada depois dela entra como"
        echo "  cliente de verdade, com projeto, chave e dado carregado."
    fi
    echo "log ...............: $LOG"
    [ "$CODIGO" -ne 0 ] && grep -E '^!!! FALHOU|^    - |FALHOU ao criar|SEM env-tenant' "$LOG"
} > "$BASE/ultima-recarga.txt"

find "$LOGS" -name 'recarga-*.log' -mtime +$MANTER_DIAS -delete 2>/dev/null
exit "$CODIGO"
