#!/bin/bash
set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# Параметры: группа и код регистрации (опционально)
GROUP="${1:-}"
REGISTRATION_CODE="${2:-}"

echo -e "${GREEN}=== Установка LMCS Agent (Ubuntu) ===${NC}"

if [ "$EUID" -ne 0 ]; then 
    echo -e "${RED}Ошибка: Запустите с sudo${NC}"
    exit 1
fi

echo -e "${YELLOW}[1/6] Проверка зависимостей...${NC}"
command -v curl >/dev/null 2>&1 || { echo -e "${RED}Установите curl${NC}"; exit 1; }
command -v systemctl >/dev/null 2>&1 || { echo -e "${RED}Требуется systemd${NC}"; exit 1; }
echo -e "${GREEN}✓ Зависимости OK${NC}"

echo -e "${YELLOW}[2/6] Определение адреса сервера...${NC}"
LOCAL_IP=$(ip route get 8.8.8.8 2>/dev/null | grep -oP 'src \K\S+' || echo "")
if [ -n "$LOCAL_IP" ]; then
    IP_PREFIX=$(echo "$LOCAL_IP" | cut -d. -f1-3)
    WS_URL="ws://${IP_PREFIX}.151:4545/agent"
else
    WS_URL="ws://192.168.1.151:4545/agent"
fi
echo -e "${GREEN}✓ Сервер: $WS_URL${NC}"

echo -e "${YELLOW}[3/6] Остановка старого сервиса...${NC}"
if systemctl is-active --quiet lmcs-agent 2>/dev/null; then
    systemctl stop lmcs-agent
fi

echo -e "${YELLOW}[4/6] Скачивание агента...${NC}"
BASE_URL="https://files.th0rn.ru/files/lmcs"
AGENT_URL="${BASE_URL}/lmcs-agent"

if ! curl -L -f -s "$AGENT_URL" -o /tmp/lmcs-agent-bin; then
    echo -e "${RED}Ошибка скачивания: $AGENT_URL${NC}"
    exit 1
fi

FILE_TYPE=$(file /tmp/lmcs-agent-bin 2>/dev/null || echo "")
if ! echo "$FILE_TYPE" | grep -qiE "(ELF|executable|binary)"; then
    echo -e "${RED}Ошибка: Скачался не бинарник${NC}"
    rm -f /tmp/lmcs-agent-bin
    exit 1
fi

echo -e "${GREEN}✓ Агент скачан${NC}"

HOSTNAME=$(hostname)
REGISTERED_MACHINE=""
AGENT_TOKEN=""

if [ -n "$REGISTRATION_CODE" ]; then
  echo -e "${YELLOW}[5/7] Регистрация машины в БД...${NC}"
  HTTP_URL=$(echo "$WS_URL" | sed 's|wss://|https://|' | sed 's|ws://|http://|' | sed 's|/agent||')
  REGISTER_URL="${HTTP_URL}/api/register"
  REGISTER_DATA="{\"machine\":\"${HOSTNAME}\",\"registrationCode\":\"${REGISTRATION_CODE}\""
  if [ -n "$GROUP" ]; then
    REGISTER_DATA="${REGISTER_DATA},\"group\":\"${GROUP}\""
  fi
  REGISTER_DATA="${REGISTER_DATA}}"

  if curl -s -X POST "$REGISTER_URL" \
    -H "Content-Type: application/json" \
    -d "$REGISTER_DATA" > /tmp/register-response.json; then
    if python3 -c "import json; d=json.load(open('/tmp/register-response.json')); exit(0 if d.get('ok') else 1)" 2>/dev/null; then
      REGISTERED_MACHINE=$(python3 -c "import json; print(json.load(open('/tmp/register-response.json')).get('machine',''))" 2>/dev/null)
      AGENT_TOKEN=$(python3 -c "import json; print(json.load(open('/tmp/register-response.json')).get('token',''))" 2>/dev/null)
      echo -e "${GREEN}✓ Зарегистрирована как: ${REGISTERED_MACHINE}${NC}"
    else
      echo -e "${YELLOW}⚠ Ошибка регистрации (см. /tmp/register-response.json)${NC}"
    fi
  else
    echo -e "${YELLOW}⚠ Не удалось связаться с сервером для регистрации${NC}"
  fi
fi

if [ -z "$REGISTERED_MACHINE" ]; then
  REGISTERED_MACHINE="$HOSTNAME"
fi

echo -e "${YELLOW}[6/7] Установка...${NC}"
rm -f /root/.lmcs/lmcs-agent.json
chmod +x /tmp/lmcs-agent-bin
mv -f /tmp/lmcs-agent-bin /usr/bin/lmcs-agent-bin

cat > /usr/bin/lmcs-agent << 'EOF'
#!/bin/bash
case "$1" in
  start) sudo systemctl start lmcs-agent ;;
  stop) sudo systemctl stop lmcs-agent ;;
  restart) sudo systemctl restart lmcs-agent ;;
  status) systemctl status lmcs-agent --no-pager -l ;;
  enable) sudo systemctl enable lmcs-agent ;;
  disable) sudo systemctl disable lmcs-agent ;;
  logs) journalctl -u lmcs-agent -f ;;
  *) echo "Использование: lmcs-agent {start|stop|restart|status|enable|disable|logs}"; exit 1 ;;
esac
EOF
chmod +x /usr/bin/lmcs-agent

TOKEN_ENV=""
if [ -n "$AGENT_TOKEN" ]; then
  TOKEN_ENV="Environment=\"NEXT_AGENT_TOKEN=${AGENT_TOKEN}\""
fi

cat > /etc/systemd/system/lmcs-agent.service << EOFSERVICE
[Unit]
Description=LMCS Agent
After=network.target

[Service]
Type=simple
User=root
Environment="NEXT_AGENT_WS=${WS_URL}"
Environment="NEXT_AGENT_MACHINE=${REGISTERED_MACHINE}"
${TOKEN_ENV}
ExecStart=/usr/bin/lmcs-agent-bin
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOFSERVICE

echo -e "${GREEN}✓ Установка завершена (machine=${REGISTERED_MACHINE})${NC}"

echo -e "${YELLOW}[7/7] Запуск сервиса...${NC}"
systemctl daemon-reload
systemctl enable lmcs-agent
systemctl start lmcs-agent

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if [ -f "$SCRIPT_DIR/install-update-infra.sh" ]; then
  bash "$SCRIPT_DIR/install-update-infra.sh" "$SCRIPT_DIR"
fi

echo ""
echo -e "${GREEN}✓ Агент установлен и запущен!${NC}"
echo ""
echo "Управление: lmcs-agent {start|stop|restart|status|logs|enable|disable}"

sleep 2
if systemctl is-active --quiet lmcs-agent; then
    echo -e "${GREEN}✓ Сервис активен${NC}"
else
    echo -e "${YELLOW}⚠ Проверьте: journalctl -u lmcs-agent${NC}"
fi
