#!/bin/bash

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# 版本信息
VERSION="1.0"
AUTHOR="hiyuelin"
TELEGRAM="https://t.me/hiyuelin"

print_logo() {
    echo -e "${CYAN}"
    echo "M3U Proxy Installer"
    echo -e "${NC}"
    echo -e "${YELLOW}Version: ${VERSION}${NC}"
    echo -e "${YELLOW}Author: ${AUTHOR}${NC}"
    echo -e "${YELLOW}Telegram: ${TELEGRAM}${NC}"
}

print_menu() {
    clear
    print_logo
    echo -e "${PURPLE}=== M3U Proxy 管理菜单 ===${NC}"
    echo -e "${BLUE}1)${NC} 部署 M3U Proxy"
    echo -e "${BLUE}2)${NC} 删除 M3U Proxy"
    echo -e "${RED}0)${NC} 退出"
    echo
}

check_and_install_docker() {
    if ! command -v docker &> /dev/null; then
        echo -e "${YELLOW}Docker 未安装,正在安装...${NC}"
        curl -fsSL https://get.docker.com -o get-docker.sh
        sudo sh get-docker.sh
        sudo usermod -aG docker $USER
        echo -e "${GREEN}Docker 安装完成${NC}"
    else
        echo -e "${GREEN}Docker 已安Docekr${NC}"
    fi
}

check_and_install_docker_compose() {
    if ! command -v docker-compose &> /dev/null; then
        echo -e "${YELLOW}Docker Compose 未安装,正在安装...${NC}"
        sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        sudo chmod +x /usr/local/bin/docker-compose
        echo -e "${GREEN}Docker Compose 安装完成${NC}"
    else
        echo -e "${GREEN}Docker Compose 已安装${NC}"
    fi
}

deploy_m3u_proxy() {
    echo -e "${GREEN}开始部署 M3U Proxy...${NC}"
    
    # 检查并安装 Docker 和 Docker Compose
    check_and_install_docker
    check_and_install_docker_compose
    
    # 1. 指定目录
    read -p "请指定一个目录用于存放 M3U Proxy 文件 (默认 /home/m3u-proxy): " m3u_dir
    m3u_dir=${m3u_dir:-/home/m3u-proxy}
    
    # 2. 创建必要的文件
    mkdir -p $m3u_dir
    touch $m3u_dir/iptv.m3u $m3u_dir/whitelist.txt $m3u_dir/ip_whitelist.txt $m3u_dir/m3u_proxy.log $m3u_dir/security_config.json
    
    # 3. 设置端口
    read -p "请输入要使用的端口 (默认 5001): " port
    port=${port:-5001}
    
    # 4. 自动获取服务器 IP 地址并生成代理服务器地址
    echo "正在尝试获取服务器 IP 地址..."
    server_ip=$(wget -qO- -4 ifconfig.me 2>&1 || curl -s4 ifconfig.me || dig +short myip.opendns.com @resolver1.opendns.com)
    if [ -z "$server_ip" ]; then
        echo -e "${RED}无法自动获取服务器 IP 地址${NC}"
        read -p "请手动输入服务器 IP 地址: " server_ip
    else
        echo -e "检测到的服务器 IP 地址: ${YELLOW}${server_ip}${NC}"
    fi

    # 构建代理服务器地址
    proxy_server="http://${server_ip}:${port}"
    echo -e "代理服务器地址: ${YELLOW}${proxy_server}${NC}"

    # 5. 设置管理员账户和密码
    read -p "请设置管理员用户名 (默认 admin): " admin_username
    admin_username=${admin_username:-admin}
    read -p "请设置管理员密码 (默认 admin123): " admin_password
    admin_password=${admin_password:-admin123}
    
    # 创建 docker-compose.yml 文件
    cat > $m3u_dir/docker-compose.yml <<EOL
version: '3'

services:
  m3u-proxy:
    image: hiyuelin/m3u-proxy:latest
    ports:
      - "${port}:5612"
    volumes:
      - ./iptv.m3u:/app/iptv.m3u
      - ./whitelist.txt:/app/whitelist.txt
      - ./ip_whitelist.txt:/app/ip_whitelist.txt
      - ./m3u_proxy.log:/app/m3u_proxy.log
      - ./security_config.json:/app/security_config.json
    environment:
      - PROXY_SERVER=${proxy_server}
      - DEBUG_MODE=False
      - ENABLE_IP_WHITELIST=False
      - CONSOLE_LOG_ENABLED=True
      - LOG_LEVEL=INFO
      - ORIGINAL_M3U_PATH=/app/iptv.m3u
      - WHITE_LIST_PATH=/app/whitelist.txt
      - IP_WHITELIST_PATH=/app/ip_whitelist.txt
      - LOG_FILE_PATH=/app/m3u_proxy.log
      - PORT=5612
      - HOST=0.0.0.0
      - ADMIN_USERNAME=${admin_username}
      - ADMIN_PASSWORD=${admin_password}
    restart: unless-stopped
EOL

    # 启动服务
    cd $m3u_dir
    docker-compose up -d
    
    echo -e "${GREEN}M3U Proxy 部署完成${NC}"
    echo -e "管理界面地址: ${YELLOW}${proxy_server}/admin${NC}"
    echo -e "用户名: ${YELLOW}${admin_username}${NC}"
    echo -e "密码: ${YELLOW}${admin_password}${NC}"
    echo
    echo -e "${CYAN}重要提示:${NC}"
    echo -e "1. 请在 ${YELLOW}${m3u_dir}/iptv.m3u${NC} 文件中添加您要代理的频道列表,或上传您的 iptv.m3u 文件替换现有文件。"
    echo -e "2. ${YELLOW}${m3u_dir}/ip_whitelist.txt${NC} 用于管理 IP 白名单。"
    echo -e "3. ${YELLOW}${m3u_dir}/whitelist.txt${NC} 用于管理域名白名单。"
    echo -e "4. 每次更新 iptv.m3u 文件后,请在管理面板中点击"刷新域名白名单"按钮以更新白名单。"
    echo -e "5. 代理后的 M3U 文件地址: ${YELLOW}${proxy_server}/iptv.m3u${NC}"
    echo
    echo -e "${YELLOW}注意:${NC}更新 iptv.m3u 文件后,请务必在管理面板中刷新域名白名单,以确保新添加的频道能够正常工作。"
    echo -e "${YELLOW}提示:${NC}在您的播放器中使用代理后的 M3U 文件地址来访问经过代理的频道列表。"
    echo
    read -p "按回车键继续..."
}

remove_m3u_proxy() {
    echo -e "${YELLOW}正在删除 M3U Proxy...${NC}"
    read -p "请输入 M3U Proxy 的安装目录 (默认 /home/m3u-proxy): " m3u_dir
    m3u_dir=${m3u_dir:-/home/m3u-proxy}
    
    if [ -f "$m3u_dir/docker-compose.yml" ]; then
        cd $m3u_dir
        echo -e "${YELLOW}停止并删除 M3U Proxy 容器...${NC}"
        docker-compose down
        
        echo -e "${YELLOW}删除 M3U Proxy 镜像...${NC}"
        docker rmi hiyuelin/m3u-proxy:latest
        
        echo -e "${YELLOW}删除 docker-compose.yml 文件...${NC}"
        rm docker-compose.yml
        
        echo -e "${GREEN}M3U Proxy 已成功删除(包括容器和镜像)${NC}"
    else
        echo -e "${RED}未找到 M3U Proxy 的 docker-compose.yml 文件,删除失败${NC}"
    fi
    
    read -p "是否要删除 M3U Proxy 的配置文件和日志?(y/N): " delete_config
    if [[ $delete_config =~ ^[Yy]$ ]]; then
        echo -e "${YELLOW}删除配置文件和日志...${NC}"
        rm -f $m3u_dir/iptv.m3u $m3u_dir/whitelist.txt $m3u_dir/ip_whitelist.txt $m3u_dir/m3u_proxy.log $m3u_dir/security_config.json
        echo -e "${GREEN}配置文件和日志已删除${NC}"
    fi
    
    read -p "按回车键继续..."
}

# 主程序
while true; do
    print_menu
    read -p "请输入选项数字: " choice
    case $choice in
        1) deploy_m3u_proxy ;;
        2) remove_m3u_proxy ;;
        0) 
            echo -e "${GREEN}感谢使用,再见!${NC}"
            exit 0
            ;;
        *)
            echo -e "${RED}无效选项,请重新选择${NC}"
            read -p "按回车键继续..."
            ;;
    esac
done