#!/usr/bin/env bash
# Instalador do cliente (Linux): instala o Tailscale, entra na rede, libera a porta do Firebird
# só para a faixa do Tailscale e mostra os dados para cadastrar no painel.
# Uso: sudo bash instalar-cliente.sh
set -euo pipefail

[ "$(id -u)" = 0 ] || { echo "Execute com sudo."; exit 1; }

read -rsp "Chave de acesso Tailscale (tskey-auth-...): " AUTHKEY; echo
read -rp "Nome do cliente (minúsculas, sem espaço, ex.: lojao): " NOME
[[ "$NOME" =~ ^[a-z0-9-]+$ ]] || { echo "Nome inválido: use letras minúsculas, números e hífen."; exit 1; }

# 1. Tailscale (o serviço do systemd mantém a conexão sem usuário logado)
command -v tailscale >/dev/null || curl -fsSL https://tailscale.com/install.sh | sh
tailscale up --authkey="$AUTHKEY" --hostname="cliente-$NOME" --accept-dns=false
IP=$(tailscale ip -4 | head -n1)

# 2. Porta em escuta do Firebird
PORTA=$(ss -ltnp 2>/dev/null | awk '/fbserver|firebird|fb_smp_server/ {n=split($4,a,":"); print a[n]; exit}')
[ -n "$PORTA" ] || read -rp "Porta do Firebird não detectada. Informe (padrão 3050): " PORTA
PORTA=${PORTA:-3050}

# 3. Firewall: só a faixa do Tailscale chega na porta do Firebird
if command -v ufw >/dev/null && ufw status | grep -q "Status: active"; then
    ufw allow from 100.64.0.0/10 to any port "$PORTA" proto tcp
else
    echo "AVISO: ufw inativo. Garanta no seu firewall que a porta $PORTA só aceite 100.64.0.0/10."
fi

# 4. Caminho do banco
find /opt /var/lib /srv /home -iname '*.fdb' 2>/dev/null | sed 's/^/  encontrado: /' || true
read -rp "Caminho completo do .FDB (como o Firebird enxerga): " CAMINHO
[ -f "$CAMINHO" ] || echo "AVISO: arquivo não encontrado nesta máquina: $CAMINHO"

RESUMO="Cadastre no painel da empresa (Configurações > Firebird):
  Host:    $IP
  Porta:   $PORTA
  Caminho: $CAMINHO
  Usuário: o usuário read-only dedicado (não use SYSDBA)"
echo; echo "$RESUMO" | tee "dados-$NOME.txt"
