#!/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 "  create    创建新日程"
    echo "  delete    删除日程"
    echo "  list      查看日程"
    echo "  open      打开日程"
    echo "  help      显示帮助信息"
    echo ""
    echo "创建日程选项:"
    echo "  -y, --year <年份>        设置开始年份 (1971-2098)"
    echo "  -m, --month <月份>       设置开始月份 (1-12)"
    echo "  -d, --day <日期>         设置开始日期 (1-31)"
    echo "  -H, --hour <小时>        设置开始小时 (0-23)"
    echo "  -M, --minute <分钟>      设置开始分钟 (0-59)"
    echo "  -eh, --end-hour <小时>   设置结束小时 (0-23)"
    echo "  -em, --end-minute <分钟> 设置结束分钟 (0-59)"
    echo "  -des, --description <描述> 设置日程内容描述"
    echo ""
    echo "删除日程选项:"
    echo "  -H, --hour <小时>        设置开始小时 (0-23)"
    echo "  -M, --minute <分钟>      设置开始分钟 (0-59)"
    echo "  -d, --day <日期>         设置日期 (1-31)"
    echo "  -m, --month <月份>       设置月份 (1-12)"
    echo "  -des, --description <描述> 设置日程内容描述（需与创建时完全一致）"
    echo ""
    echo "查看日程选项:"
    echo "  -y, --year <年份>        查看指定年份的日程"
    echo "  -m, --month <月份>       查看指定月份的日程"
    echo "  -d, --day <日期>         查看指定日期的日程"
    echo ""
    echo "打开日程选项:"
    echo "  -y, --year <年份>        设置年份 (1971-2098)"
    echo "  -m, --month <月份>       设置月份 (1-12)"
    echo "  -d, --day <日期>         设置日期 (1-31)"
    echo ""
    echo "示例:"
    echo "  $0 create --year 2026 --month 4 --day 1 --hour 9 --minute 0 --end-hour 10 --end-minute 0 --description '出差到上海'"
    echo "  $0 delete --hour 9 --minute 0 --day 1 --month 4 --description '出差到上海'"
    echo "  $0 list --year 2026 --month 4"
    echo "  $0 open --year 2026 --month 4 --day 1"
}

# 解析命令行参数
parse_args() {
    if [ $# -lt 1 ]; then
        show_help
        exit 1
    fi
    
    COMMAND="$1"
    shift
    
    while [[ $# -gt 0 ]]; do
        case $1 in
            # 创建日程选项
            -y|--year)
                YEAR="$2"
                shift 2
                ;;
            -m|--month)
                MONTH="$2"
                shift 2
                ;;
            -d|--day)
                DAY="$2"
                shift 2
                ;;
            -H|--hour)
                HOUR="$2"
                shift 2
                ;;
            -M|--minute)
                MINUTE="$2"
                shift 2
                ;;
            -eh|--end-hour)
                END_HOUR="$2"
                shift 2
                ;;
            -em|--end-minute)
                END_MINUTE="$2"
                shift 2
                ;;
            -des|--description)
                DESCRIPTION="$2"
                shift 2
                ;;
            # 删除日程选项
            -id|--schedule-id)
                SCHEDULE_ID="$2"
                shift 2
                ;;
            # 其他选项
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                echo "未知参数: $1"
                show_help
                exit 1
                ;;
        esac
    done
}

# 验证创建日程参数
validate_create_args() {
    if [ -z "$YEAR" ] || ! [[ "$YEAR" =~ ^[0-9]+$ ]] || [ "$YEAR" -lt 1971 ] || [ "$YEAR" -gt 2098 ]; then
        echo "错误: 年份必须是1971-2098之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$MONTH" ] || ! [[ "$MONTH" =~ ^[0-9]+$ ]] || [ "$MONTH" -lt 1 ] || [ "$MONTH" -gt 12 ]; then
        echo "错误: 月份必须是1-12之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$DAY" ] || ! [[ "$DAY" =~ ^[0-9]+$ ]] || [ "$DAY" -lt 1 ] || [ "$DAY" -gt 31 ]; then
        echo "错误: 日期必须是1-31之间的整数"
        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 "$END_HOUR" ] || ! [[ "$END_HOUR" =~ ^[0-9]+$ ]] || [ "$END_HOUR" -lt 0 ] || [ "$END_HOUR" -gt 23 ]; then
        echo "错误: 结束小时必须是0-23之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$END_MINUTE" ] || ! [[ "$END_MINUTE" =~ ^[0-9]+$ ]] || [ "$END_MINUTE" -lt 0 ] || [ "$END_MINUTE" -gt 59 ]; then
        echo "错误: 结束分钟必须是0-59之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$DESCRIPTION" ]; then
        echo "错误: 必须设置日程内容描述"
        show_help
        exit 1
    fi
}

# 验证删除日程参数
validate_delete_args() {
    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 "$DAY" ] || ! [[ "$DAY" =~ ^[0-9]+$ ]] || [ "$DAY" -lt 1 ] || [ "$DAY" -gt 31 ]; then
        echo "错误: 日期必须是1-31之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$MONTH" ] || ! [[ "$MONTH" =~ ^[0-9]+$ ]] || [ "$MONTH" -lt 1 ] || [ "$MONTH" -gt 12 ]; then
        echo "错误: 月份必须是1-12之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$DESCRIPTION" ]; then
        echo "错误: 必须设置日程内容描述"
        show_help
        exit 1
    fi
}

# 验证打开日程参数
validate_open_args() {
    if [ -z "$YEAR" ] || ! [[ "$YEAR" =~ ^[0-9]+$ ]] || [ "$YEAR" -lt 1971 ] || [ "$YEAR" -gt 2098 ]; then
        echo "错误: 年份必须是1971-2098之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$MONTH" ] || ! [[ "$MONTH" =~ ^[0-9]+$ ]] || [ "$MONTH" -lt 1 ] || [ "$MONTH" -gt 12 ]; then
        echo "错误: 月份必须是1-12之间的整数"
        show_help
        exit 1
    fi
    
    if [ -z "$DAY" ] || ! [[ "$DAY" =~ ^[0-9]+$ ]] || [ "$DAY" -lt 1 ] || [ "$DAY" -gt 31 ]; then
        echo "错误: 日期必须是1-31之间的整数"
        show_help
        exit 1
    fi
}

# 创建日程
create_schedule() {
    echo "创建日程:"
    echo "  日期: $YEAR-$MONTH-$DAY"
    echo "  开始时间: $HOUR:$MINUTE"
    echo "  结束时间: $END_HOUR:$END_MINUTE"
    echo "  描述: $DESCRIPTION"
    
    # 调用dbus接口创建日程
    local result=$(dbus-send --session --print-reply \
    --dest=org.ukui.calendar.Notifications \
    /org/ukui/calendar/Notifications \
    org.ukui.calendar.Notifications.ScheduleNotification \
    int32:$HOUR \
    int32:$MINUTE \
    int32:$DAY \
    int32:$MONTH \
    int32:$YEAR \
    int32:$END_MINUTE \
    int32:$END_HOUR \
    string:"$DESCRIPTION")
    
    # 解析返回结果
    local success=$(echo "$result" | grep -o 'boolean \(true\|false\)' | cut -d' ' -f2)
    
    if [ "$success" = "true" ]; then
        echo "日程创建成功"
    else
        echo "日程创建失败"
        exit 1
    fi
}

# 删除日程
delete_schedule() {
    echo "删除日程:"
    echo "  时间: $HOUR:$MINUTE"
    echo "  日期: $MONTH-$DAY"
    echo "  描述: $DESCRIPTION"
    
    # 调用dbus接口删除日程
    local result=$(dbus-send --session --print-reply \
    --dest=org.ukui.calendar.Notifications \
    /org/ukui/calendar/Notifications \
    org.ukui.calendar.Notifications.DeleteSchedule \
    int32:$HOUR \
    int32:$MINUTE \
    int32:$DAY \
    int32:$MONTH \
    string:"$DESCRIPTION")
    
    # 解析返回结果
    local success=$(echo "$result" | grep -o 'boolean \(true\|false\)' | cut -d' ' -f2)
    
    if [ "$success" = "true" ]; then
        echo "日程删除成功"
    else
        echo "日程删除失败"
        exit 1
    fi
}

# 查看日程（空实现）
list_schedule() {
    echo "查看日程:"
    if [ -n "$YEAR" ]; then
        echo "  年份: $YEAR"
    fi
    if [ -n "$MONTH" ]; then
        echo "  月份: $MONTH"
    fi
    if [ -n "$DAY" ]; then
        echo "  日期: $DAY"
    fi
    echo "查看日程功能尚未实现"
    # 这里将实现查看日程的dbus调用
}

# 打开日程
open_schedule() {
    echo "打开日程:"
    echo "  日期: $YEAR-$MONTH-$DAY"
    
    # 调用dbus接口打开日程
    local result=$(dbus-send --session --print-reply \
    --dest=org.ukui.calendar.Notifications \
    /org/ukui/calendar/Notifications \
    org.ukui.calendar.Notifications.OpenSchedule \
    int32:$DAY \
    int32:$MONTH \
    int32:$YEAR)
    
    # 解析返回结果
    local success=$(echo "$result" | grep -o 'boolean \(true\|false\)' | cut -d' ' -f2)
    
    if [ "$success" = "true" ]; then
        echo "日程打开成功"
    else
        echo "日程打开失败"
        exit 1
    fi
}

# 主函数
main() {
    # 解析参数
    parse_args "$@"
    
    # 执行相应的命令
    case $COMMAND in
        create)
            validate_create_args
            create_schedule
            ;;
        delete)
            validate_delete_args
            delete_schedule
            ;;
        list)
            list_schedule
            ;;
        open)
            validate_open_args
            open_schedule
            ;;
        help)
            show_help
            ;;
        *)
            echo "未知命令: $COMMAND"
            show_help
            exit 1
            ;;
    esac
}

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