#!/bin/bash

set -e

# Script cài đặt bên trong gói releases/{{version}}
# Yêu cầu: đang đứng trong thư mục releases/{{version}} (chứa docker-compose.yml, mediasoup/, management/, chat/, recording/, playback/)

# Lấy VERSION từ biến môi trường hoặc từ tên thư mục hiện tại
VERSION="${VERSION:-$(basename "$(pwd)")}"

echo "=========================================="
echo "  CALL29 INSTALLER"
echo "=========================================="
echo "Version: ${VERSION}"
echo "Thư mục hiện tại: $(pwd)"
echo "=========================================="
echo ""

# Kiểm tra và cài đặt ffmpeg nếu cần
if [ ! -f "docker-compose.yml" ]; then
  echo "Lỗi: Không tìm thấy docker-compose.yml trong $(pwd)"
  exit 1
fi

# Kiểm tra xem Docker đã được cài đặt chưa
if ! command -v docker &> /dev/null || ! docker ps &> /dev/null; then
    echo "Docker chưa được cài đặt hoặc chưa chạy. Bắt đầu cài đặt..."
    sudo apt install curl -y
    sudo install -m 0755 -d /etc/apt/keyrings

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
      https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    # Cài Docker
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    sudo systemctl start docker
    sudo systemctl enable docker
    sudo usermod -aG docker $USER

    echo "Docker đã được cài đặt thành công!"
    echo "Lưu ý: Bạn có thể cần đăng xuất và đăng nhập lại để sử dụng Docker mà không cần sudo."
    docker ps
else
    echo "Docker đã được cài đặt. Bỏ qua bước cài đặt."
fi

# Cài đặt ffmpeg nếu cần (cho recording hoặc playback)
if [ -d "recording" ] || [ -d "playback" ]; then
    if ! command -v ffmpeg &> /dev/null; then
        echo ""
        echo "Dịch vụ ghi hình/Playback yêu cầu cài đặt ffmpeg. Cài đặt ffmpeg..."
        sudo apt update
        sudo apt install ffmpeg -y
    fi
fi

load_image_if_exists() {
  local tar_path="$1"
  if [ -f "${tar_path}" ]; then
    echo "Đang load Docker image từ ${tar_path}..."
    docker load -i "${tar_path}"
  else
    echo "Bỏ qua, không tìm thấy file: ${tar_path}"
  fi
}

echo ""
echo "=== Bước 1: Load Docker images ==="

# Mediasoup + Redis
load_image_if_exists "mediasoup/mediasoup:${VERSION}.tar"
load_image_if_exists "mediasoup/redis:7-alpine.tar"

# Management + Mongo + Mongo Express
load_image_if_exists "management/management:${VERSION}.tar"
load_image_if_exists "management/mongo:4.4.tar"
load_image_if_exists "management/mongo-express:1.0.2.tar"

# Chat
load_image_if_exists "chat/chat:${VERSION}.tar"

# Recording
load_image_if_exists "recording/recording:${VERSION}.tar"

# Playback + Tab-recorder
load_image_if_exists "playback/playback:${VERSION}.tar"
load_image_if_exists "playback/tab-recorder:${VERSION}.tar"

echo ""
echo "Kiểm tra các image đã load:"
docker images | grep "call29/" || echo "Không tìm thấy image call29/* (vui lòng kiểm tra lại)."

echo ""
echo "=== Bước 2: Khởi động services với docker compose ==="

echo "Đang chạy: docker compose up -d --remove-orphans"
docker compose up -d --remove-orphans

echo ""
echo "=== Hoàn tất cài đặt ==="
echo "Có thể kiểm tra containers bằng lệnh: docker ps"
