#!/bin/bash

# 银河麒麟系统闹钟管理脚本
# 通过dbus接口管理闹钟（设置、删除）

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
export DISPLAY=:0

# 显示使用帮助
show_help() {
    echo "使用方法: $0 [命令] [选项]"
    echo ""
    echo "命令:"
    echo "  set       设置新闹钟"
    echo "  delete    删除闹钟"
    echo "  list      列出所有闹钟"
    echo "  help      显示帮助信息"
    echo ""
    echo "设置闹钟选项:"
    echo "  -n, --name <闹钟名称>    设置闹钟名称"
    echo "  -H, --hour <小时>        设置小时（0-23）"
    echo "  -m, --minute <分钟>      设置分钟（0-59）"
    echo "  -r, --remind <稍后提醒>  设置稍后提醒（无、5分钟后、10分钟后、20分钟后、30分钟后、1小时后）"
    echo "  -p, --repeat <重复>      设置重复（不重复；每天；周一；周二；周三；周四；周五；周六；周日；工作日）"
    echo ""
    echo "删除闹钟选项:"
    echo "  -n, --name <闹钟名称>    设置要删除的闹钟名称"
    echo "  -id, --alarm-id <ID>     设置要删除的闹钟ID"
    echo ""
    echo "示例:"
    echo "  $0 set --name 起床 --hour 7 --minute 30 --remind 5分钟后 --repeat 工作日"
    echo "  $0 delete --name 起床"
    echo "  $0 delete --alarm-id 123"
    echo "  $0 list"
}

# 解析命令行参数
parse_args() {
    if [ $# -lt 1 ]; then
        show_help
        exit 1
    fi
    
    COMMAND="$1"
    shift
    
    while [[ $# -gt 0 ]]; do
        case $1 in
            # 设置闹钟选项
            -n|--name)
                CLOCK_NAME="$2"
                shift 2
                ;;
            -H|--hour)
                HOUR="$2"
                shift 2
                ;;
            -m|--minute)
                MINUTE="$2"
                shift 2
                ;;
            -r|--remind)
                REMIND_LATER="$2"
                shift 2
                ;;
            -p|--repeat)
                REPEAT="$2"
                shift 2
                ;;
            # 删除闹钟选项
            -id|--alarm-id)
                ALARM_ID="$2"
                shift 2
                ;;
            # 其他选项
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                echo "未知参数: $1"
                show_help
                exit 1
                ;;
        esac
    done
}

# 验证设置闹钟参数
validate_set_args() {
    if [ -z "$CLOCK_NAME" ]; then
        echo "错误: 必须设置闹钟名称"
        show_help
        exit 1
    fi
    
    if [ -z "$HOUR" ] || ! [[ "$HOUR" =~ ^[0-9]+$ ]] || [ "$HOUR" -lt 0 ] || [ "$HOUR" -gt 23 ]; then
        echo "错误: 小时必须是0-23之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$MINUTE" ] || ! [[ "$MINUTE" =~ ^[0-9]+$ ]] || [ "$MINUTE" -lt 0 ] || [ "$MINUTE" -gt 59 ]; then
        echo "错误: 分钟必须是0-59之间的整数"
        show_help
        exit 1
    fi
    
    # 设置默认值
    if [ -z "$REMIND_LATER" ]; then
        REMIND_LATER="无"
    fi
    
    if [ -z "$REPEAT" ]; then
        REPEAT="不重复"
    fi
}

# 验证删除闹钟参数
validate_delete_args() {
    if [ -z "$CLOCK_NAME" ] && [ -z "$ALARM_ID" ]; then
        echo "错误: 必须设置闹钟名称或闹钟ID"
        show_help
        exit 1
    fi
    
    if [ -n "$ALARM_ID" ] && ! [[ "$ALARM_ID" =~ ^[0-9]+$ ]]; then
        echo "错误: 闹钟ID必须是整数"
        show_help
        exit 1
    fi
}

# 设置闹钟
set_alarm() {
    # 构建JSON参数
    local json_params='{"clockName":"'"$CLOCK_NAME"'","hour":'"$HOUR"',"minute":'"$MINUTE"',"remindLater":"'"$REMIND_LATER"'","repeat":"'"$REPEAT"'"}'
    
    echo "设置闹钟:"
    echo "  名称: $CLOCK_NAME"
    echo "  时间: $HOUR:$MINUTE"
    echo "  稍后提醒: $REMIND_LATER"
    echo "  重复: $REPEAT"
    
    # 调用dbus接口设置闹钟
    dbus-send --session --print-reply \
    --dest=org.kylin.dbus.ukuiclock \
    /org/kylin/dbus/ukuiclock \
    org.kylin.dbus.ukuiclock.addAlarmRpc \
    string:"$json_params"
    
    if [ $? -eq 0 ]; then
        echo "闹钟设置完成"
    else
        echo "闹钟设置失败"
    fi
}

# 删除闹钟（空实现）
delete_alarm() {
    echo "删除闹钟:"
    if [ -n "$CLOCK_NAME" ]; then
        echo "  闹钟名称: $CLOCK_NAME"
    fi
    if [ -n "$ALARM_ID" ]; then
        echo "  闹钟ID: $ALARM_ID"
    fi
    echo "删除闹钟功能尚未实现"
    # 这里将实现删除闹钟的dbus调用
    echo "\n闹钟删除操作已执行（功能待实现）"
}

# 列出所有闹钟（空实现）
list_alarms() {
    echo "列出所有闹钟:"
    echo "列出所有闹钟功能尚未实现"
    # 这里将实现列出所有闹钟的dbus调用
    echo "\n闹钟列出操作已执行（功能待实现）"
}

# 主函数
main() {
    # 解析参数
    parse_args "$@"
    
    # 执行相应的命令
    case $COMMAND in
        set)
            validate_set_args
            set_alarm
            ;;
        delete)
            validate_delete_args
            delete_alarm
            ;;
        list)
            list_alarms
            ;;
        help)
            show_help
            ;;
        *)
            echo "未知命令: $COMMAND"
            show_help
            exit 1
            ;;
    esac
}

# 执行主函数
if [ "$0" = "$BASH_SOURCE" ]; then
    main "$@"
fi
