#!/bin/bash

# Pastikan argumen username dan durasi perpanjangan telah diberikan
if [ $# -lt 2 ]; then
    echo "Usage: $0 [username] [durasi_perpanjangan_hari]"
    exit 1
fi

# Variabel yang diperlukan
domain=$(cat /root/domain)
token=$(cat /root/token.json | jq -r .access_token)
api_host="127.0.0.1"
get_marzban_api_port() {
  local env_file="/opt/marzban/.env"
  [[ -r "$env_file" ]] || { echo "7879"; return; }   # fallback opsional

  local port
  port="$(grep -E '^[[:space:]]*UVICORN_PORT[[:space:]]*=' "$env_file" \
           | tail -n1 \
           | sed -E 's/.*=[[:space:]]*["'\'']?([0-9]+).*/\1/')"

  # Validasi angka
  if [[ "$port" =~ ^[0-9]+$ ]]; then
    echo "$port"
  else
    echo "7879"   # fallback opsional lain
  fi
}

api_port="$(get_marzban_api_port)"

# Mengambil username dan durasi perpanjangan dari argumen
username=$1
exp=$2

# API_URL harus ditempatkan setelah definisi variabel domain
API_URL="http://${api_host}:${api_port}/api/user/${username}"

# Fetch user data from the API
response=$(curl -s -X 'GET' \
  "${API_URL}" \
  -H 'accept: application/json' \
  -H "Authorization: Bearer ${token}")

# Periksa apakah username ada dalam respons (sesuaikan dengan struktur respons API Anda)
if [[ ! "${response}" =~ "\"${username}\"" ]]; then
    echo "Gagal renew user ${username}. Periksa kembali argumen Anda atau pastikan username sudah terdaftar pada database."
    exit 1
fi

# Ambil nilai expire dari respons JSON (sesuaikan dengan struktur respons API Anda)
current_expiration_epoch=$(jq -r ".expire" <<< "${response}")

# Hitung waktu expire yang baru
new_expiration_epoch=$((current_expiration_epoch + (exp * 86400)))

# API call untuk memperbarui waktu expire user
curl -s -X 'PUT' \
  "${API_URL}" \
  -H 'accept: application/json' \
  -H "Authorization: Bearer ${token}" \
  -H 'Content-Type: application/json' \
  -d '{
    "proxies": {},
    "inbounds": {},
    "expire": '"${new_expiration_epoch}"'
  }' > /dev/null

# Periksa apakah permintaan berhasil
if [ $? -eq 0 ]; then
    clear
    echo "Masa aktif untuk ${username} telah berhasil diperpanjang selama ${exp} hari."
    echo "-==============================-"
    echo "Masa Aktif yang baru untuk user ${username}"

    # Format waktu baru ke dalam bentuk yang lebih bersahabat
    new_expiration_date=$(date -d "@${new_expiration_epoch}" +"%Y-%m-%d %H:%M:%S")
    echo "Expired pada: ${new_expiration_date}"
    status ${username}
else
    echo "Gagal renew user ${username}. Periksa kembali argumen Anda atau pastikan username sudah terdaftar pada database."
    exit 1
fi
