#!/bin/sh
set -e

# ── Verificação de integridade dos arquivos críticos ─────────────────────────
# O manifesto é gerado no build e armazenado fora do webroot (root:root, 444)
if [ -f /var/.mp_manifest ]; then
    FAIL=0
    while IFS= read -r line; do
        EXPECTED=$(echo "$line" | awk '{print $1}')
        FILE=$(echo "$line" | awk '{print $2}')
        if [ -f "$FILE" ]; then
            ACTUAL=$(sha256sum "$FILE" | awk '{print $1}')
            if [ "$EXPECTED" != "$ACTUAL" ]; then
                echo "[MonitorPing] ERRO: arquivo modificado detectado — $FILE"
                FAIL=1
            fi
        fi
    done < /var/.mp_manifest
    if [ "$FAIL" -eq 1 ]; then
        echo "[MonitorPing] Inicialização bloqueada por falha de integridade."
        echo "[MonitorPing] Reinstale o sistema ou contate o suporte."
        exit 1
    fi
fi

# ── Aguarda o banco de dados estar pronto ────────────────────────────────────
if [ -n "$DB_HOST" ]; then
    echo "[entrypoint] Aguardando banco de dados..."
    RETRIES=60
    until php -r "
        \$dsn = 'pgsql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_NAME');
        try {
            new PDO(\$dsn, getenv('DB_USER'), getenv('DB_PASS'));
            exit(0);
        } catch (Exception \$e) {
            exit(1);
        }
    " 2>/dev/null; do
        RETRIES=$((RETRIES - 1))
        if [ "$RETRIES" -eq 0 ]; then
            echo "[entrypoint] ERRO: banco não respondeu após 120 segundos."
            exit 1
        fi
        sleep 2
    done
    echo "[entrypoint] Banco de dados pronto."
fi

# ── Se foram passados argumentos, executa o comando (containers cron) ────────
if [ "$#" -gt 0 ]; then
    exec "$@"
fi

# ── Container app: roda setup e inicia Apache ────────────────────────────────
# /opt/monitorping é um bind mount do host — roda como root aqui, então pode
# garantir que arquivos criados por exec (root) sejam legíveis pelo www-data.
# Cria arquivos de estado que o painel web precisa (só estes — NÃO .license_key nem .machine_id,
# pois esses são gerenciados pelo PHP e não devem ser criados como root vazios).
touch /opt/monitorping/.update.log \
      /opt/monitorping/.update_status.json \
      /opt/monitorping/.version_check_cache 2>/dev/null || true
# Corrige permissões de TODOS os dot-files existentes para que www-data possa ler/escrever.
# (cobre arquivos criados por exec root durante install, como .machine_id e .license_cache)
for f in /opt/monitorping/.*; do
    [ -f "$f" ] && chmod 666 "$f" 2>/dev/null || true
done
# Se ACL estiver configurada no host, 755 é suficiente.
# Sem ACL, o install.sh já teria colocado 777 como fallback.
# Não forçamos chmod aqui para não sobrescrever a decisão do install.

# Copia VERSION para o diretório compartilhado (permite leitura sem rebuild)
if [ -f /var/www/html/VERSION ]; then
    cp /var/www/html/VERSION /opt/monitorping/VERSION 2>/dev/null || true
fi

echo "[entrypoint] Executando setup_db.php..."
php /var/www/html/setup_db.php
echo "[entrypoint] Setup concluído."

echo "[entrypoint] Iniciando Apache..."
exec apache2-foreground
