#!/usr/bin/env bash
# create_reminders.sh - 从解析结果 JSON 批量创建 cron 提醒任务
#
# 用法：
#   bash create_reminders.sh \
#     --events-json /tmp/schedule_upcoming.json \
#     --channel dingtalk \
#     --to "user_id_or_sender"
#
# 环境变量（可覆盖）：
#   SCHEDULE_CHANNEL  - 推送渠道（dingtalk / feishu / wecom / telegram）
#   SCHEDULE_TO       - 接收者 ID
#   SCHEDULE_TZ       - 时区（默认 Asia/Shanghai）

set -euo pipefail

# ── 参数解析 ──────────────────────────────────────────────
EVENTS_JSON=""
CHANNEL="${SCHEDULE_CHANNEL:-}"
TO="${SCHEDULE_TO:-}"
TZ="${SCHEDULE_TZ:-Asia/Shanghai}"
DRY_RUN=0

while [[ $# -gt 0 ]]; do
  case "$1" in
    --events-json)  EVENTS_JSON="$2"; shift 2 ;;
    --channel)      CHANNEL="$2"; shift 2 ;;
    --to)           TO="$2"; shift 2 ;;
    --tz)           TZ="$2"; shift 2 ;;
    --dry-run)      DRY_RUN=1; shift ;;
    *) echo "未知参数: $1" >&2; exit 1 ;;
  esac
done

# ── 前置检查 ──────────────────────────────────────────────
if [[ -z "$EVENTS_JSON" ]]; then
  echo "错误：请指定 --events-json <file>" >&2
  exit 1
fi

if [[ ! -f "$EVENTS_JSON" ]]; then
  echo "错误：文件不存在: $EVENTS_JSON" >&2
  exit 1
fi

if ! command -v jq &>/dev/null; then
  echo "错误：需要安装 jq" >&2
  exit 1
fi

if ! command -v openclaw &>/dev/null; then
  echo "错误：openclaw 命令未找到" >&2
  exit 1
fi

# ── 读取事项列表 ──────────────────────────────────────────
COUNT=$(jq '.upcoming | length' "$EVENTS_JSON")

if [[ "$COUNT" -eq 0 ]]; then
  echo "✅ 没有需要创建提醒的事项。"
  exit 0
fi

echo "📅 共 $COUNT 个事项需要创建提醒（渠道：$CHANNEL）"
echo ""

# ── 构建提醒消息 ──────────────────────────────────────────
build_message() {
  local title="$1"
  local start_str="$2"
  local end_str="$3"
  local location="$4"
  local participants="$5"
  local note="$6"
  local advance="$7"

  local msg="⏰ 日程提醒\n\n📌 【${title}】即将在 ${advance} 分钟后开始\n🕐 ${start_str}"
  [[ -n "$end_str" ]] && msg="${msg} – ${end_str}"
  [[ -n "$location" ]] && msg="${msg}\n📍 ${location}"
  [[ -n "$participants" ]] && msg="${msg}\n👥 ${participants}"
  [[ -n "$note" ]] && msg="${msg}\n📝 ${note}"
  echo "$msg"
}

# ── 遍历事项并创建 cron 任务 ─────────────────────────────
CREATED=0
SKIPPED=0
FAILED=0

for i in $(seq 0 $((COUNT - 1))); do
  ev=$(jq ".upcoming[$i]" "$EVENTS_JSON")

  title=$(echo "$ev" | jq -r '.title')
  date_str=$(echo "$ev" | jq -r '.date')
  start_str=$(echo "$ev" | jq -r '.start_str')
  end_str=$(echo "$ev" | jq -r '.end_str')
  location=$(echo "$ev" | jq -r '.location // ""')
  participants=$(echo "$ev" | jq -r '.participants // ""')
  note=$(echo "$ev" | jq -r '.note // ""')
  advance=$(echo "$ev" | jq -r '.advance_min')
  remind_cron=$(echo "$ev" | jq -r '.remind_cron // ""')
  remind_time=$(echo "$ev" | jq -r '.remind_time_str // ""')
  priority=$(echo "$ev" | jq -r '.priority')

  # 没有 cron 表达式则跳过
  if [[ -z "$remind_cron" || "$remind_cron" == "null" ]]; then
    echo "  ⏭️  跳过（无时间信息）：${title}"
    ((SKIPPED++)) || true
    continue
  fi

  # 构建任务名（避免特殊字符）
  safe_title=$(echo "$title" | tr ' 【】《》""''()（）' '_' | tr -cd '[:alnum:]_-' | cut -c1-40)
  task_name="schedule-${date_str}-${safe_title}"

  # 构建提醒消息
  msg=$(build_message "$title" "$start_str" "$end_str" "$location" "$participants" "$note" "$advance")

  echo "  ➕ [${priority}] ${title}"
  echo "     提醒时刻：${remind_time}（提前 ${advance} 分钟）"
  echo "     Cron：${remind_cron}"

  if [[ "$DRY_RUN" -eq 1 ]]; then
    echo "     [DRY-RUN] 跳过实际创建"
    ((CREATED++)) || true
    continue
  fi

  # 构建 openclaw cron 命令
  # 使用 --system-event + --session main，触发 main session 直接显示提醒消息，
  # 不走 announce 推送流程，兼容 webchat/控制台等所有渠道，无需渠道配置。
  CRON_CMD=(
    openclaw cron add
    --name "$task_name"
    --cron "$remind_cron"
    --tz "$TZ"
    --session main
    --system-event "$msg"
    --delete-after-run
  )

  if "${CRON_CMD[@]}" 2>/dev/null; then
    echo "     ✅ 已创建"
    ((CREATED++)) || true
  else
    echo "     ❌ 创建失败" >&2
    ((FAILED++)) || true
  fi

  echo ""
done

# ── 汇总 ─────────────────────────────────────────────────
echo "────────────────────────────────"
echo "✅ 成功创建：${CREATED} 个提醒任务"
[[ "$SKIPPED" -gt 0 ]] && echo "⏭️  跳过：${SKIPPED} 个"
[[ "$FAILED" -gt 0 ]] && echo "❌ 失败：${FAILED} 个"
echo ""
echo "查看所有提醒任务："
echo "  openclaw cron list"
echo ""
echo "删除指定任务："
echo "  openclaw cron remove <task-id>"
