#!/bin/bash

# Путь к директории видеофайлов стрима
RESTREAMING_DIR=/var/restreaming
# Путь к RTSP стриму камеры (ВАЖНО! Указать точный ip к камере)
STREAM_PATH="rtsp://admin:6625ce45f1@192.168.1.108:554/cam/realmonitor?channel=1&subtype=0"

# Проверка, запущен ли скрипт от root
if [ "$(id -u)" != "0" ]; then
    echo "Этот скрипт должен быть запущен с правами root." 1>&2
    exit 1
fi

# Обновляем пакеты и устанавливаем необходимые утилиты
apt update && apt upgrade -y
apt install -y ffmpeg nginx ssh mc htop net-tools
  
# Создаем директорию для стрима
mkdir -p $RESTREAMING_DIR
chown -R www-data:www-data $RESTREAMING_DIR

# Создаем скрипт запуска ffmpeg
SCRIPT_PATH="/usr/local/bin/start-ip-camera-restreaming.sh"
cat > $SCRIPT_PATH << EOF
#!/bin/bash
# Очищаем старые файлы
rm -f ${RESTREAMING_DIR}/*
# Запускаем ffmpeg с логгированием
ffmpeg -rtsp_transport tcp -i "${STREAM_PATH}" \\
       -c:v libx264 -b:v 800k \\
       -hls_time 5 -hls_list_size 1 -hls_flags delete_segments \\
       -f hls ${RESTREAMING_DIR}/playlist.m3u8 > ${RESTREAMING_DIR}/ffmpeg.log 2>&1
EOF

# Даем права на выполнение
chmod +x $SCRIPT_PATH

# Создаем systemd сервис
SERVICE_PATH="/etc/systemd/system/ip-camera-restreaming.service"
cat > $SERVICE_PATH << EOF
[Unit]
Description=IP-camera restreaming service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=$RESTREAMING_DIR
ExecStart=$SCRIPT_PATH
Restart=always
RestartSec=5
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[Install]
WantedBy=multi-user.target
EOF

# Перечитываем демоны systemd
systemctl daemon-reload
systemctl enable ip-camera-restreaming.service
systemctl start ip-camera-restreaming.service

# Настраиваем Nginx (ТОЧНО КАК БЫЛО В НАЧАЛЬНОМ КОНФИГЕ)
NGINX_CONF="/etc/nginx/sites-available/restreaming"
cat > $NGINX_CONF << EOF
server {
    listen 9999;
    server_name localhost;

    root $RESTREAMING_DIR;
    autoindex on;

    location ~ /\. {
        deny all;
    }

    location / {
        try_files \$uri \$uri/ =404;
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}
EOF

# Активируем конфигурацию
ln -sf $NGINX_CONF /etc/nginx/sites-enabled/

# Удаляем дефолтный конфиг, если он есть
rm -f /etc/nginx/sites-enabled/default

# Проверяем конфигурацию Nginx
nginx -t || { echo "Ошибка в конфигурации Nginx"; exit 1; }

# Перезапускаем Nginx
systemctl restart nginx

# Настраиваем firewall (открываем порт 9999)
ufw allow 9999/tcp
ufw reload

# Выводим информацию для проверки
IP_ADDR=$(hostname -I | awk '{print $1}')
echo "Настройка завершена!"
echo "Стрим доступен по адресу: http://${IP_ADDR}:9999/playlist.m3u8"
echo "Проверьте статус сервисов:"
echo "  systemctl status ip-camera-restreaming.service"
echo "  systemctl status nginx"