#!/usr/bin/env bash
# Agente HostGerente: Coleta de diagnostico somente leitura da HostGerente (zero dependencias)
set -u

ID_ANALISE="${1:-demo}"
ENDPOINT="${2:-https://hostgerente.com/raiox/api.php}"

# 1. Identificacao e carga
HN="$(hostname 2>/dev/null || echo 'desconhecido')"
UP="$(uptime 2>/dev/null || echo '')"
CPUS="$(nproc 2>/dev/null || grep -c ^processor /proc/cpuinfo 2>/dev/null || echo 1)"
LOAD="$(awk '{print $1" "$2" "$3}' /proc/loadavg 2>/dev/null || echo '0 0 0')"

# 2. Memoria e Swap (MB)
MEM_TOTAL=0; MEM_FREE=0; SWAP_TOTAL=0; SWAP_USED=0
if [ -f /proc/meminfo ]; then
  MEM_TOTAL=$(( $(awk '/MemTotal:/ {print $2}' /proc/meminfo) / 1024 ))
  MEM_FREE=$(( $(awk '/MemAvailable:/ {print $2}' /proc/meminfo 2>/dev/null || awk '/MemFree:/ {print $2}' /proc/meminfo) / 1024 ))
  SWAP_TOTAL=$(( $(awk '/SwapTotal:/ {print $2}' /proc/meminfo) / 1024 ))
  SWAP_FREE=$(( $(awk '/SwapFree:/ {print $2}' /proc/meminfo 2>/dev/null || awk '/SwapTotal:/ {print $2}' /proc/meminfo) / 1024 ))
  SWAP_USED=$(( SWAP_TOTAL - SWAP_FREE ))
fi

# 3. Disco e Inodes da raiz
DISK_USAGE="$(df -k / 2>/dev/null | awk 'NR==2 {print $5}' | tr -d '%')"
INODE_USAGE="$(df -i / 2>/dev/null | awk 'NR==2 {print $5}' | tr -d '%')"

# 4. Motor de E-mail (Exim)
MAIL_QUEUE=-1
MAIL_FROZEN=0
if command -v exim >/dev/null 2>&1; then
  MAIL_QUEUE="$(exim -bpc 2>/dev/null | tr -d '[:space:]' || echo -1)"
  MAIL_FROZEN="$(exim -bpr 2>/dev/null | grep -c 'frozen' 2>/dev/null | tr -d '[:space:]')"
  MAIL_FROZEN="${MAIL_FROZEN:-0}"
fi

# 5. Servicos essenciais
STATUS_WEB="down"
(pgrep -f "httpd|litespeed|lsphp|nginx" >/dev/null 2>&1) && STATUS_WEB="up"

STATUS_MYSQL="down"
(pgrep -f "mysqld|mariadbd" >/dev/null 2>&1) && STATUS_MYSQL="up"

STATUS_FIREWALL="down"
if [ -f /etc/csf/csf.conf ] && (pgrep -f "lfd" >/dev/null 2>&1); then
  STATUS_FIREWALL="csf_active"
elif command -v iptables >/dev/null 2>&1 && iptables -L -n 2>/dev/null | grep -q 'Chain'; then
  STATUS_FIREWALL="iptables_active"
fi

# 6. Painel detectado
PANEL="outro"
[ -d /usr/local/cpanel ] && PANEL="cpanel"
[ -d /usr/local/directadmin ] && PANEL="directadmin"

# 7. Metricas adicionais de seguranca e performance (somente leitura)
PHP_VER="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;' 2>/dev/null || echo 'nao_detectado')"
SSH_PORT="$(awk '$1 ~ /^Port$/ {print $2}' /etc/ssh/sshd_config 2>/dev/null | tail -n 1)"
SSH_PORT="${SSH_PORT:-22}"
SSH_ROOT="$(awk '$1 ~ /^PermitRootLogin$/ {print tolower($2)}' /etc/ssh/sshd_config 2>/dev/null | tail -n 1)"
SSH_ROOT="${SSH_ROOT:-yes}"

# Sistema operacional (sem quebras de linha)
OS_NAME="Linux"
if [ -f /etc/redhat-release ]; then
  OS_NAME="$(head -n 1 /etc/redhat-release | tr -d '"' | tr '\n' ' ')"
elif [ -f /etc/os-release ]; then
  OS_NAME="$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"')"
fi

# Top contas com maior consumo de CPU (apenas nomes de usuarios, sem comandos)
TOP_CONTAS="$(ps -eo user,%cpu --sort=-%cpu 2>/dev/null | awk 'NR>1 && $1!="root" && $1!="nobody" {print $1}' | uniq | head -n 3 | paste -sd, - || echo '')"

# 8. Montagem do payload JSON
JSON_PAYLOAD=$(cat <<PAYLOAD_EOF
{
  "token": "${ID_ANALISE}",
  "painel": "${PANEL}",
  "hostname": "${HN}",
  "os": "${OS_NAME}",
  "cpus": ${CPUS},
  "load_avg": "${LOAD}",
  "memoria_total_mb": ${MEM_TOTAL},
  "memoria_livre_mb": ${MEM_FREE},
  "swap_usada_mb": ${SWAP_USED},
  "disco_uso_pct": ${DISK_USAGE:-0},
  "inode_uso_pct": ${INODE_USAGE:-0},
  "fila_exim": ${MAIL_QUEUE},
  "fila_frozen": ${MAIL_FROZEN},
  "servico_web": "${STATUS_WEB}",
  "servico_mysql": "${STATUS_MYSQL}",
  "firewall": "${STATUS_FIREWALL}",
  "php_versao": "${PHP_VER}",
  "ssh_porta": "${SSH_PORT}",
  "ssh_root": "${SSH_ROOT}",
  "top_contas": "${TOP_CONTAS}"
}
PAYLOAD_EOF
)

# 8. Saida local ou envio com mensagem formatada
if [ "${ID_ANALISE}" = "local" ]; then
  echo "${JSON_PAYLOAD}"
  exit 0
fi

RESP="$(curl -s -X POST -H "Content-Type: application/json" -d "${JSON_PAYLOAD}" "${ENDPOINT}" 2>/dev/null || echo '')"
URL="$(echo "${RESP}" | sed -n 's/.*"relatorio_url":"\([^"]*\)".*/\1/p' | sed 's/\\//g')"

echo ""
if [ -n "${URL}" ]; then
  echo "============================================================"
  echo " Agente HostGerente: Diagnostico concluido com sucesso!"
  echo "============================================================"
  echo " Acesse seu laudo tecnico confidencial:"
  echo ""
  echo " 👉 ${URL}"
  echo ""
  echo "============================================================"
else
  echo "============================================================"
  echo " Diagnostico gerado localmente (sem conexao com a API):"
  echo "============================================================"
  echo "${JSON_PAYLOAD}"
fi
echo ""
