#!/bin/bash

# 定义容器名称和邮件域名
CONTAINER_NAME="1Panel-maddy-mail-wMQC"
MAIL_DOMAIN="sfwww.cn"  # 邮件的域名可以在这里修改

# 显示操作菜单
show_menu() {
    echo "请选择操作:"
    echo "1. 查看邮件列表"
    echo "2. 添加邮件账户"
    echo "3. 移除邮件账户"
    echo "4. 更改密码"
    echo "5. 退出"
}

# 查看邮件列表并合并输出
check_mail_list() {
    # 获取并去重两个邮件列表
    echo "执行命令: maddy creds list"
    creds_list=$(docker exec -i $CONTAINER_NAME /bin/sh -c "maddy creds list" | sort | uniq)

    echo "执行命令: maddy imap-acct list"
    imap_list=$(docker exec -i $CONTAINER_NAME /bin/sh -c "maddy imap-acct list" | sort | uniq)

    # 合并并去重两个列表
    merged_list=$(echo -e "$creds_list\n$imap_list" | sort | uniq)

    # 输出合并后的列表
    echo "合并后的邮件账户列表:"
    echo "$merged_list"

    # 比较并找出缺失的账户
    missing_in_creds=$(comm -23 <(echo "$imap_list" | sort) <(echo "$creds_list" | sort))
    missing_in_imap=$(comm -13 <(echo "$imap_list" | sort) <(echo "$creds_list" | sort))

    # 输出缺失的账户
    if [ -n "$missing_in_creds" ]; then
        echo "以下账户在 creds list 中缺失:"
        echo "$missing_in_creds"
    fi
    if [ -n "$missing_in_imap" ]; then
        echo "以下账户在 imap-acct list 中缺失:"
        echo "$missing_in_imap"
    fi
}

# 添加邮件账户
add_mail_account() {
    # 提示并输入账户名
    read -p "请输入邮件账户（例如 test）： " email

    echo "正在添加邮件账户..."
    # 进入容器并手动输入密码
    docker exec -it $CONTAINER_NAME /bin/sh -c "maddy creds create $email@$MAIL_DOMAIN"
    docker exec -it $CONTAINER_NAME /bin/sh -c "maddy imap-acct create $email@$MAIL_DOMAIN"

    # 完成账户添加后查看邮件列表
    echo "账户添加完成，查看邮件列表..."
    check_mail_list
}

# 移除邮件账户
remove_mail_account() {
    # 提示并输入账户名
    read -p "请输入要移除的邮件账户（例如 test）： " email

    # 提示确认移除
    read -p "你确定要移除账户 $email@$MAIL_DOMAIN 吗？(y/n): " confirm
    if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
        echo "正在移除邮件账户..."
        # 执行移除操作
        docker exec -it $CONTAINER_NAME /bin/sh -c "echo y | maddy creds remove $email@$MAIL_DOMAIN"
        docker exec -it $CONTAINER_NAME /bin/sh -c "echo y | maddy imap-acct remove $email@$MAIL_DOMAIN"

        # 完成账户移除后查看邮件列表
        echo "账户移除完成，查看邮件列表..."
        check_mail_list
    else
        echo "账户移除操作已取消。"
    fi
}


# 更改邮件账户密码
change_password() {
    # 提示并输入账户名
    read -p "请输入要更改密码的邮件账户（例如 test）： " email

    echo "正在更改密码..."
    # 执行更改密码命令，不再提示输入密码
    docker exec -it $CONTAINER_NAME /bin/sh -c "maddy creds password $email@$MAIL_DOMAIN"

    # 完成密码更改后查看邮件列表
    echo "密码更改完成!"
    echo "查看邮件列表..."
    check_mail_list
}

# 主程序：展示菜单并执行选定操作
while true; do
    show_menu
    # 输入选项并处理
    read -p "请输入选项: " option
    case $option in
        1) check_mail_list ;;  # 查看合并后的邮件列表
        2) add_mail_account ;;  # 添加邮件账户
        3) remove_mail_account ;;  # 移除邮件账户
        4) change_password ;;  # 更改密码
        5) echo "退出程序."; break ;;  # 退出脚本
        *) echo "无效的选项，请重新选择。" ;;  # 无效输入
    esac
done
