#!/usr/bin/env bash
# Fedora: включить SSH и подготовить удалённый доступ.
#   sudo bash setup-ssh-fedora.sh [имя_пользователя]
set -euo pipefail

USER_NAME="${1:-${SUDO_USER:-$USER}}"
SSH_DIR="/home/$USER_NAME/.ssh"
AUTH_KEYS="$SSH_DIR/authorized_keys"
PUBKEY_FILE="$(dirname "$0")/mac_pubkey.txt"

die() { printf 'error: %s\n' "$*" >&2; exit 1; }

[ "$(id -u)" -eq 0 ] || die "запустите с sudo"

id "$USER_NAME" >/dev/null 2>&1 || die "пользователь не найден: $USER_NAME"

printf '=== SSH remote access (Fedora) ===\n\n'

# openssh-server
if ! rpm -q openssh-server >/dev/null 2>&1; then
  if command -v dnf >/dev/null 2>&1; then
    dnf install -y openssh-server || die "dnf install openssh-server failed"
  else
    die "установите openssh-server вручную"
  fi
fi

systemctl enable --now sshd
systemctl is-active sshd >/dev/null || die "sshd не запустился"

# firewall
if systemctl is-active firewalld >/dev/null 2>&1; then
  firewall-cmd --permanent --add-service=ssh
  firewall-cmd --reload
  printf '[ok] firewalld: ssh разрешён\n'
else
  printf '[info] firewalld не активен — пропуск\n'
fi

# authorized_keys
install -d -m 700 -o "$USER_NAME" -g "$USER_NAME" "$SSH_DIR"
touch "$AUTH_KEYS"
chown "$USER_NAME:$USER_NAME" "$AUTH_KEYS"
chmod 600 "$AUTH_KEYS"

if [ -s "$PUBKEY_FILE" ]; then
  if ! grep -qF "$(awk '{print $1,$2}' "$PUBKEY_FILE")" "$AUTH_KEYS" 2>/dev/null; then
    cat "$PUBKEY_FILE" >>"$AUTH_KEYS"
    printf '[ok] добавлен ключ из mac_pubkey.txt\n'
  else
    printf '[ok] ключ из mac_pubkey.txt уже есть\n'
  fi
else
  printf '[!] mac_pubkey.txt пуст — добавьте ключ Mac вручную:\n'
  printf '    echo "ssh-ed25519 AAAA... mac-fedora" >> %s\n' "$AUTH_KEYS"
fi

# hostname для mDNS
if command -v hostnamectl >/dev/null 2>&1; then
  hostnamectl set-hostname fedora 2>/dev/null || true
fi

printf '\n--- Сеть ---\n'
ip -4 -o addr show scope global 2>/dev/null | awk '{print $2, $4}' || true
printf 'hostname: %s\n' "$(hostname -f 2>/dev/null || hostname)"

printf '\n--- Готово ---\n'
printf 'С Mac: ssh %s@<IP>\n' "$USER_NAME"
printf 'mDNS: ssh %s@fedora.local\n' "$USER_NAME"
printf '\nЕсли с Mac не пингуется — изоляция хотспота или используйте BT PAN (см. REMOTE_ACCESS.md).\n'
