#!/bin/bash
NEW_DIFY_ADMIN_PASSWORD=$1

# 安装expect
apt install expect -y

# 修改FILES_URL
eip=""
get_ip() {
    local services=(
        "ifconfig.me"
        "ipinfo.io/ip"
        "api.ipify.org"
        "icanhazip.com"
    )
    
    for service in "${services[@]}"; do
        if ip=$(curl -s --max-time 3 "$service"); then
            eip=$ip && return 0
        fi
    done
    return 1
}

while true; do
    files_url=$(grep "^FILES_URL=" /dify/docker/.env)
    get_ip
    if [ $? -eq 0 ]; then
        if [[ "$files_url" == "FILES_URL=http://api:5001" ]]; then
            sed -i "s|^FILES_URL=http://api:5001$|FILES_URL=http://${eip}|" /dify/docker/.env
            cd /dify/docker
            docker compose down
            docker compose up -d
            echo "Update FILES_URL=http://${eip} succeeded!"
        elif [[ "$files_url" == "FILES_URL=" ]]; then
            sed -i "s|^FILES_URL=$|FILES_URL=http://${eip}|" /dify/docker/.env
            cd /dify/docker
            docker compose down
            docker compose up -d
            echo "Update FILES_URL=http://${eip} succeeded!"
        fi
        break
    else
        sleep 10
    fi
done


# 修改dify管理员密码
docker_api=""
docker_redis=""

while true; do
    container_list=$(docker ps --format '{{.Names}}' | tr '\n' ' ')

    if [[ "$container_list" == *"docker-api-1"* ]]; then
       docker_api="docker-api-1"
       docker_redis="docker-redis-1"
       break
    elif [[ "$container_list" == *"docker_api_1"* ]]; then
       docker_api="docker_api_1"
       docker_redis="docker_redis_1"
       break
    else
        sleep 10
    fi
done

while true; do
    /usr/bin/expect <<EOF
    spawn docker exec -it $docker_api flask reset-password
    expect "Email: "
    send "super\@dify.com\r"
    expect "New password: "
    send "${NEW_DIFY_ADMIN_PASSWORD}\r"
    expect "Password confirm: "
    send "${NEW_DIFY_ADMIN_PASSWORD}\r"
    expect "Password reset successfully."
    expect eof
EOF

    if [ $? -eq 0 ]; then
        break
    else
        sleep 10
    fi
done


while true; do
    /usr/bin/expect <<EOF
    spawn docker exec -it $docker_redis redis-cli FLUSHALL
    expect "OK\r"
    expect eof
EOF

    if [ $? -eq 0 ]; then
        break
    else
        sleep 10
    fi
done
