#!/usr/bin/env bash
# ZION TERMINAL - Diagnostico do Tailscale
# Cyberdeck criado por Pablo Murad em 2026
export LC_ALL=C
. /opt/zion-terminal/bin/zion-lib.sh 2>/dev/null
[ "$1" = "--help" ] && { echo "Uso: zion tailscale — estado, IP, MagicDNS, peers, direto/DERP, netcheck e recomendacoes."; exit 0; }
ui_dep tailscale || exit 1

ui_header "TAILSCALE"
ui_section "ESTADO"
printf '  %b%-14s%b %b\n' "$ZDISC" "Conexao" "$ZR" "$(tailscale status >/dev/null 2>&1 && ui_state ok || ui_state off)"
ui_kv "Versao"  "$(tailscale version 2>/dev/null | head -1)"
ui_kv "IPv4"    "$(tailscale ip -4 2>/dev/null | head -1)"
ui_kv "IPv6"    "$(tailscale ip -6 2>/dev/null | head -1)"
ui_kv "Servico" "$(systemctl is-enabled tailscaled 2>/dev/null)/$(systemctl is-active tailscaled 2>/dev/null)"

ui_section "PEERS"
online=$(tailscale status 2>/dev/null | awk '/^100\./ && !/offline/{c++} END{print c+0}')
total=$(tailscale status 2>/dev/null | awk '/^100\./{c++} END{print c+0}')
ui_kv "Online" "$online de $total"
tailscale status 2>/dev/null | awk '/^100\./{printf "  %-16s %-10s %s\n",$2,$4,$5}' | head -10

ui_section "REDE (netcheck)"
nc=$(tailscale netcheck 2>/dev/null)
udp=$(echo "$nc" | awk -F': ' '/UDP/{print $2; exit}')
derp=$(echo "$nc" | grep -A20 "DERP latency" | grep -m1 "ms" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
varies=$(echo "$nc" | awk -F': ' '/MappingVariesByDestIP/{print $2; exit}')
printf '  %b%-14s%b %b  %s\n' "$ZDISC" "UDP" "$ZR" "$([ "$udp" = true ] && ui_state ok || ui_state warn)" ""
ui_kv "DERP proximo" "${derp:-?}"
printf '  %b%-14s%b %b  %s\n' "$ZDISC" "NAT dificil" "$ZR" "$([ "$varies" = true ] && ui_state warn || ui_state ok)" "${varies:-?}"

ui_section "RECOMENDACOES"
tailscale status 2>/dev/null | grep -q "advertising routes" && ui_info "Peers anunciam rotas — se precisar: tailscale set --accept-routes (nao aplicado)"
[ "$varies" = true ] && ui_info "NAT dificil: fora da LAN tende a DERP-SP (~19ms). Normal."
ui_info "Teste um peer: zion radar  ou  tailscale ping <host>"
ui_rule
