#!/bin/bash

# parameter
while getopts ":d:p:e:y:k:r:" opt; do
  case $opt in
    d) dir_path="$OPTARG";;
    p) proxy_url="$OPTARG";;
    e) emby_url="$OPTARG";;
	y) xiaoya_url="$OPTARG";;
	k) hardware="$OPTARG";;
	r) rebuild="$OPTARG";;
    \?) echo "无效的选项: -$OPTARG" >&2; exit 1;;
    :) echo "选项 -$OPTARG 需要一个参数" >&2; exit 1;;
  esac
done

if [ -z "$dir_path" ]; then
	echo "需要指定目录才可运行本脚本"
	exit -1
fi

if [ -z "$emby_url" ]; then
	echo "需要指定emby链接才可运行本脚本"
	exit -1
fi

if [[ $emby_url =~ :([0-9]+)$ ]]; then
  emby_port="${BASH_REMATCH[1]}"
  echo "emby_port: $emby_port"
else
  echo "未找到emby port"
fi

if [ -z "$proxy_url" ]; then
	echo "未设置代理地址"
else
	echo "代理地址： $proxy_url"
	docker_http_porxy="-e HTTP_PROXY='$proxy_url'"
	docker_https_porxy="-e HTTPS_PROXY='$proxy_url'"
fi

if [ -z "$xiaoya_url" ]; then
	echo "需要指定xiaoya alist地址"
	exit -1
fi

if [ "$hardware" = "intel" ]; then
	gpu_hardware=" --device /dev/dri:/dev/dri "
	echo "部署为intel显卡环境"
elif [ "$hardware" = "nvidia" ]; then
	gpu_hardware=" --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all"
	echo "部署为nvidia环境"
elif [ "$hardware" = "all" ]; then
	gpu_hardware=" --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all --device /dev/dri:/dev/dri "
	echo "部署为intel+nvidia环境"
else
	gpu_hardware=""
	echo "部署为无显卡环境"
fi


# proc emby docker
docker stop emby_xiaoya 2>/dev/null
docker rm emby_xiaoya 2>/dev/null
cpu_arch=$(uname -m)
case $cpu_arch in
	"x86_64" | *"amd64"*)
		docker pull amilys/embyserver:beta
		;;
	"aarch64" | *"arm64"* | *"armv8"* | *"arm/v8"*)
		docker pull emby/embyserver_arm64v8:latest
		;;
	*)
		echo "目前只支持intel64和amd64架构，你的架构是：$cpu_arch"
		exit 1
		;;
esac

docker_exist=$(docker images |grep amilys/embyserver |grep beta)
if [ -z "$docker_exist" ]; then
	echo "拉取镜像失败，请检查网络，或者翻墙后再试"
	exit 1
fi

# xiaoya docker address
echo $xiaoya_url > $dir_path/docker_address.txt
if [ -s $dir_path/docker_address.txt ]; then
	docker_addr=$(head -n1 $dir_path/docker_address.txt)
else
	echo "请检查xiaoya目录权限，无法写入目录"
	exit -1
fi

echo "测试xiaoya的联通性.......尝试连接 $docker_addr"
wget -q -T 5 -O /tmp/test.md "$docker_addr/README.md"
test_size=$(du -k /tmp/test.md |cut -f1)
if [[ "$test_size" -eq 196 ]] || [[ "$test_size" -eq 0 ]]; then
	echo "请检查xiaoya是否正常运行后再试"
	exit 1
else
	echo "xiaoya容器正常工作"	
fi

if [ "$rebuild" = "yes" ] || [ ! -f "$dir_path/temp/config.mp4" ]; then
	# proc emby directory
	echo "清理媒体库原来保存的元数据和配置......."
	mkdir -p $dir_path/temp
	rm -rf $dir_path/xiaoya $dir_path/config 
	echo "清理完成"

	free_size=$(df -P $dir_path |tail -n1|awk '{print $4}')
	free_size=$((free_size))
	if [ "$free_size" -le 146800640  ]; then
		free_size_G=$((free_size/1024/1024))
		echo "空间剩余容量不够： $free_size_G""G 小于最低要求140G"
		exit 1
	fi

	# decompress the config
	mkdir -p $dir_path/xiaoya
	mkdir -p $dir_path/config
	chmod 755 $dir_path
	chown root:root $dir_path
	local_sha=$(docker inspect --format='{{index .RepoDigests 0}}' xiaoyaliu/glue:latest  |cut -f2 -d:)
	remote_sha=$(curl -s "https://hub.docker.com/v2/repositories/xiaoyaliu/glue/tags/latest"|grep -o '"digest":"[^"]*' | grep -o '[^"]*$' |tail -n1 |cut -f2 -d:)
	if [ ! "$local_sha" == "$remote_sha" ]; then
		docker rmi xiaoyaliu/glue:latest
	fi

	if [ -s $dir_path ]; then
		docker run -it --security-opt seccomp=unconfined --rm --net=host -v $dir_path:/media -v $dir_path:/etc/xiaoya -e LANG=C.UTF-8  xiaoyaliu/glue:latest /update_all.sh
		echo $emby_url > $dir_path/emby_server.txt
		echo e825ed6f7f8f44ffa0563cddaddce14d > $dir_path/infuse_api_key.txt
		chmod -R 777 $dir_path/*
	fi
fi

# emby proc
case $cpu_arch in
	"x86_64" | *"amd64"*)
		docker run -d --name emby_xiaoya -v $dir_path/xiaoya:/media -v $dir_path/config:/config -e TZ="Asia/Shanghai" $docker_http_porxy $docker_https_porxy $gpu_hardware --network=bridge -p "${emby_port}:6908" -e UID=1026 -e GID=100 --restart always amilys/embyserver:beta
        echo "emby访问地址: ${emby_url} 账号:xiaoya 密码：1234"
		;;
	"aarch64" | *"arm64"* | *"armv8"* | *"arm/v8"*)
		docker run -d --name emby_xiaoya -v $dir_path/config:/config -v $dir_path/xiaoya:/media --net=host  --user 1026:100 --restart always emby/embyserver_arm64v8:latest
		;;
	*)
		echo "目前只支持intel64和amd64架构，你的架构是：$cpu_arch"
		exit 1
		;;
esac

