#!/bin/bash

clear
cat <<'EOF'
############################################################
#                                                          #
#                 ██████╗  ██╗ ██╗                         #
#                ██╔═══██╗███║███║                         #
#                ██║   ██║╚██║╚██║                         #
#                ██║   ██║ ██║ ██║                         #
#                ╚██████╔╝ ██║ ██║                         #
#                 ╚═════╝  ╚═╝ ╚═╝                         #
#                                                          #
#              auto install by Squallp                     #
#                                                          #
############################################################
EOF

echo ""
echo "========================================="
echo "        o11v4 AUTO INSTALLER"
echo "   (Ubuntu 22.04 / 24.04 podržano)"
echo "========================================="
echo ""

# ---------------- ROOT CHECK ----------------
if [ "$EUID" -ne 0 ]; then
  echo "Molim pokreni skriptu kao root (sudo su)."
  exit 1
fi

# ---------------- USER INPUT ----------------
read -p "Unesi PORT za o11 panel (default 2302): " O11_PORT
[ -z "$O11_PORT" ] && O11_PORT=2302

# username/password su default
O11_USER="admin"
O11_PASS="admin"

echo ""
echo "-----------------------------------------"
echo "Port      : $O11_PORT"
echo "Username  : $O11_USER (default)"
echo "Password  : $O11_PASS (default)"
echo "-----------------------------------------"
echo ""

# ---------------- OS DETECTION ----------------
OS_VER=""
if [ -f /etc/os-release ]; then
  . /etc/os-release
  OS_VER="$VERSION_ID"
fi

echo "Detektovana verzija OS-a: $OS_VER"
echo ""

# ---------------- UPDATE SISTEMA ----------------
echo "[1/12] Update sistema..."
apt update -y && apt upgrade -y

# ---------------- TIMEZONE ----------------
echo "[2/12] Podesavam timezone na Europe/Sarajevo..."
timedatectl set-timezone Europe/Sarajevo || echo "Upozorenje: nisam uspio postaviti timezone (provjeri rucno)."

# ---------------- OSNOVNI PAKETI ----------------
echo "[3/12] Instaliram osnovne pakete..."
apt install -y curl wget unzip python3 python3-pip python3-venv python3-dev lsb-release

# ---------------- PYTHON PAKETI ----------------
echo "[4/12] Instaliram Python pakete za o11..."
pip3 install requests urllib3 dnspython requests-toolbelt beautifulsoup4 lxml pywidevine pkce waitress flask requests pwinput lxml playwright || echo "Upozorenje: neki pip paketi nisu instalirani, provjeri kasnije."

# Playwright browseri / deps (za Chrome potrebe)
echo "[4b/12] Playwright install..."
playwright install || echo "Upozorenje: playwright install nije prošao."
playwright install-deps || echo "Upozorenje: playwright install-deps nije prošao."

# ---------------- NODE + NPM + PM2 ----------------
echo "[5/12] Instaliram NodeJS, NPM i PM2..."
apt install -y nodejs npm
npm install -g pm2

echo "PM2 verzija:"
pm2 -v || echo "Upozorenje: PM2 se ne može pokrenuti."

# ---------------- FLASK / GUNICORN ----------------
echo "[6/12] Instaliram Flask / Gunicorn ovisno o verziji Ubuntu-a..."

if [[ "$OS_VER" == 22.* ]]; then
  echo "Ubuntu 22.x detektovan -> koristim APT pakete za Flask/Gunicorn."
  apt install -y python3-flask python3-gunicorn
elif [[ "$OS_VER" == 24.* ]]; then
  echo "Ubuntu 24.x detektovan -> uklanjam python3-blinker i koristim PIP (--break-system-packages)."
  apt remove --purge -y python3-blinker || true
  pip3 install flask gunicorn --break-system-packages || echo "Upozorenje: Flask/Gunicorn PIP instalacija nije potpuno uspjela."
else
  echo "Nepoznata verzija ($OS_VER). Pretpostavljam Ubuntu 22 stil -> APT Flask/Gunicorn."
  apt install -y python3-flask python3-gunicorn
fi

# ---------------- RADNI DIREKTORIJI ----------------
echo "[7/12] Kreiram /home/o11 i skidam o11 arhivu..."
mkdir -p /home/o11
cd /home/o11

# Skini i raspakuj o11
if [ -f "o11.zip" ]; then
  echo "Postoji stari o11.zip, brisem ga..."
  rm -f o11.zip
fi

wget --user=installer --password='Samo-Mi_o11-2026!*!*!*' -O o11.zip "http://95.217.78.120/o11/o11%2B.zip"
if [ ! -f "o11.zip" ]; then
  echo "Greska: o11.zip nije skinut. Prekidam."
  exit 1
fi

unzip -o o11.zip

# Dozvole
chmod 755 o11v4 run.sh 2>/dev/null || true

# ---------------- HOSTS + IPV6 ----------------
echo "[8/12] Podesavam /etc/hosts i IPv6 (nsswitch)..."

sed -i '/lic\.cryptolive\.one/d' /etc/hosts
sed -i '/lic\.bitmaster\.cc/d' /etc/hosts

echo "127.0.0.1 lic.cryptolive.one" >> /etc/hosts
echo "127.0.0.1 lic.bitmaster.cc" >> /etc/hosts

# nsswitch.conf - gasimo ipv6 lookup preko 'myhostname' itd, ostavljamo files dns
if grep -q "^hosts:" /etc/nsswitch.conf; then
  sed -i 's/^hosts:.*/hosts: files dns/' /etc/nsswitch.conf
else
  echo "hosts: files dns" >> /etc/nsswitch.conf
fi

# ---------------- LICENSE SERVER ----------------
echo "[9/12] Podesavam i pokrecem licencni server (server.py preko PM2)..."

cd /home/o11

# Ako postoji varijabla ipAddress u server.py, osiguraj da je 127.0.0.1
if grep -q "ipAddress" server.py 2>/dev/null; then
  sed -i "s/ipAddress *= *.*/ipAddress = '127.0.0.1'/" server.py
fi

pm2 start server.py --name licserver --interpreter python3 || echo "Upozorenje: PM2 nije uspio pokrenuti server.py"

pm2 startup systemd -u root --hp /root || true
pm2 save || true
systemctl enable pm2-root || true
systemctl start pm2-root || true

# ---------------- HLS / DL DIREKTORIJI ----------------
echo "[10/12] Kreiram DL i HLS foldere i podesavam dozvole..."

mkdir -p /home/o11/dl
mkdir -p /home/o11/hls

chmod 1777 /home/o11/dl
chmod 1777 /home/o11/hls

# ---------------- FFMPEG ----------------
echo "[11/12] Instaliram staticki ffmpeg u /home/o11/bin..."

mkdir -p /home/o11/bin

cd /tmp
rm -rf ffmpeg-*-static ffmpeg-release-amd64-static.tar.xz

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-*-static

cp ffmpeg /home/o11/bin/ffmpeg
chmod +x /home/o11/bin/ffmpeg

# Dodaj /home/o11/bin na PATH ako već nije
if ! grep -q 'export PATH="/home/o11/bin:$PATH"' /etc/profile; then
  echo 'export PATH="/home/o11/bin:$PATH"' >> /etc/profile
fi

# ---------------- RAM DISK ZA HLS/DL ----------------
echo "[12/12] Podesavam RAM disk (tmpfs) za /home/o11/hls i /home/o11/dl..."

# fstab entries za hls i dl
if ! grep -q "/home/o11/hls " /etc/fstab; then
  echo 'tmpfs /home/o11/hls tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=70% 0 0' >> /etc/fstab
fi

if ! grep -q "/home/o11/dl " /etc/fstab; then
  echo 'tmpfs /home/o11/dl tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=70% 0 0' >> /etc/fstab
fi

# Kreiraj poddirektorij za live
mkdir -p /home/o11/hls/live

# (Opcionalno) doda i hls/live u fstab ako zelis trajni ramdisk samo za live (6G)
if ! grep -q "/home/o11/hls/live " /etc/fstab; then
  echo 'tmpfs /home/o11/hls/live tmpfs rw,nosuid,nodev,exec,noatime,size=6G 0 0' >> /etc/fstab
fi

# Primijeni fstab
mount -a || echo "Upozorenje: mount -a nije prosao, provjeri /etc/fstab."

# ---------------- SYSTEMD SERVICE ----------------
echo ""
echo "Kreiram systemd servis za o11v4..."

cat <<EOF > /etc/systemd/system/o11v4.service
[Unit]
Description=o11 v4 Streaming Panel
After=network-online.target pm2-root.service
Wants=network-online.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/o11
ExecStart=/home/o11/o11v4 -p $O11_PORT -path /home/o11/ -plstreamname "%s [%p]"
Restart=always
RestartSec=2
LimitNOFILE=1048576
KillMode=control-group
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

mkdir -p /etc/systemd/system/o11v4.service.d
cat <<EOF > /etc/systemd/system/o11v4.service.d/override.conf
[Service]
StandardOutput=journal
StandardError=journal
Restart=on-failure
RestartSec=2
EOF

systemctl daemon-reload
systemctl enable o11v4
systemctl restart o11v4

echo ""
echo "Provjera statusa o11v4 (kratki prikaz):"
systemctl status o11v4 --no-pager | head -n 10 || echo "Upozorenje: provjera statusa nije prosla."

# ---------------- JAVNA IP ADRESA ----------------
echo ""
echo "Dohvacam javnu IP adresu servera..."

if command -v curl >/dev/null 2>&1; then
    SERVER_IP=$(curl -s ipv4.icanhazip.com)
elif command -v wget >/dev/null 2>&1; then
    SERVER_IP=$(wget -qO- ipv4.icanhazip.com)
else
    SERVER_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
fi

[ -z "$SERVER_IP" ] && SERVER_IP="NEPOZNATA_IP"

echo ""
echo "========================================="
echo "           INSTALACIJA ZAVRŠENA"
echo "========================================="
echo "Panel URL : http://$SERVER_IP:$O11_PORT"
echo "Username  : $O11_USER"
echo "Password  : $O11_PASS"
echo "-----------------------------------------"
echo "Napomena: default admin/admin mozes kasnije"
echo "promijeniti u samom o11 panelu."
echo "========================================="
echo ""
echo "Komande za provjeru:"
echo "  pm2 list"
echo "  systemctl status o11v4 --no-pager"
echo "  journalctl -u o11v4 -f"
echo ""