#!/usr/bin/env bash
# setup.sh - 一次性配置日程提醒助手，注册每日自动激活任务
#
# 运行：bash setup.sh
# 或带参数快速配置：
#   bash setup.sh \
#     --file /home/node/.openclaw/workspace/日程.md \
#     --channel dingtalk \
#     --to "user123" \
#     --hour 7 \
#     --tz "Asia/Shanghai"

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_DIR="${HOME}/.config/schedule-reminder"
CONFIG_FILE="${CONFIG_DIR}/config.env"

# ── 颜色输出 ──────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; RESET='\033[0m'

info()    { echo -e "${CYAN}[INFO]${RESET} $*"; }
success() { echo -e "${GREEN}[✓]${RESET} $*"; }
warn()    { echo -e "${YELLOW}[!]${RESET} $*"; }
error()   { echo -e "${RED}[✗]${RESET} $*" >&2; }

# ── 参数解析 ──────────────────────────────────────────────
SCHEDULE_FILE=""
CHANNEL=""
RECIPIENT=""
DAILY_HOUR=""
TZ_VAL="Asia/Shanghai"
SEND_SUMMARY="true"
NON_INTERACTIVE=0

while [[ $# -gt 0 ]]; do
  case "$1" in
    --file)       SCHEDULE_FILE="$2"; shift 2 ;;
    --channel)    CHANNEL="$2"; shift 2 ;;
    --to)         RECIPIENT="$2"; shift 2 ;;
    --hour)       DAILY_HOUR="$2"; shift 2 ;;
    --tz)         TZ_VAL="$2"; shift 2 ;;
    --no-summary) SEND_SUMMARY="false"; shift ;;
    --yes)        NON_INTERACTIVE=1; shift ;;
    *) error "未知参数: $1"; exit 1 ;;
  esac
done

# ── 欢迎界面 ──────────────────────────────────────────────
echo ""
echo -e "${BOLD}📅 日程提醒助手 · 一次性配置${RESET}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# ── 检查依赖 ──────────────────────────────────────────────
info "检查依赖..."
MISSING=()
for cmd in python3 jq openclaw; do
  if command -v "$cmd" &>/dev/null; then
    success "$cmd 已安装"
  else
    error "$cmd 未找到"
    MISSING+=("$cmd")
  fi
done

if [[ "${#MISSING[@]}" -gt 0 ]]; then
  error "请先安装以上缺少的依赖，再运行此脚本。"
  exit 1
fi
echo ""

# ── 交互式配置 ────────────────────────────────────────────
if [[ "$NON_INTERACTIVE" -eq 0 ]]; then

  # 日程文件路径
  if [[ -z "$SCHEDULE_FILE" ]]; then
    echo -e "${BOLD}1. 你的日程 Markdown 文件在哪里？${RESET}"
    echo "   （例如：/home/node/.openclaw/workspace/日程.md 或 ~/Documents/schedule.md）"
    read -r -p "   > " SCHEDULE_FILE
  fi
  SCHEDULE_FILE="${SCHEDULE_FILE/#\~/$HOME}"
  if [[ ! -f "$SCHEDULE_FILE" ]]; then
    warn "文件 $SCHEDULE_FILE 不存在，将在此路径创建空模板。"
    mkdir -p "$(dirname "$SCHEDULE_FILE")"
    cp "${SCRIPT_DIR}/../schedule_template.md" "$SCHEDULE_FILE" 2>/dev/null || \
      echo "<!-- skill: schedule-reminder -->" > "$SCHEDULE_FILE"
    success "已创建模板文件：$SCHEDULE_FILE"
  else
    success "日程文件：$SCHEDULE_FILE"
  fi
  echo ""

  # 提醒渠道
  if [[ -z "$CHANNEL" ]]; then
    echo -e "${BOLD}2. 定时推送到哪个渠道？（可直接回车跳过，默认回到上次对话渠道）${RESET}"
    echo "   1) dingtalk  - 钉钉"
    echo "   2) feishu    - 飞书"
    echo "   3) wecom     - 企业微信"
    echo "   4) telegram  - Telegram"
    echo "   直接回车    - 跳过（提醒默认发回上次对话）"
    read -r -p "   请输入数字或渠道名 [回车跳过]: " CHANNEL_INPUT
    case "${CHANNEL_INPUT:-}" in
      1|dingtalk)  CHANNEL="dingtalk" ;;
      2|feishu)    CHANNEL="feishu" ;;
      3|wecom)     CHANNEL="wecom" ;;
      4|telegram)  CHANNEL="telegram" ;;
      "")          CHANNEL="" ;;
      *)           CHANNEL="$CHANNEL_INPUT" ;;
    esac
  fi
  if [[ -n "$CHANNEL" ]]; then
    success "提醒渠道：$CHANNEL"
  else
    success "提醒渠道：（默认，回到上次对话渠道）"
  fi
  echo ""

  # 接收者 ID（渠道为空时跳过）
  if [[ -n "$CHANNEL" && -z "$RECIPIENT" ]]; then
    echo -e "${BOLD}3. 接收提醒的用户 ID 是什么？${RESET}"
    case "$CHANNEL" in
      dingtalk)
        echo "   钉钉用户 ID 格式示例：zhangsan（钉钉员工工号或 staff ID）"
        echo "   提示：在钉钉「个人主页」或「我的」里可以看到员工 ID"
        ;;
      feishu)
        echo "   飞书用户 open_id（形如 ou_xxxxxxxx）"
        ;;
      wecom)
        echo "   企业微信 userid（后台「通讯录」里的账号）"
        ;;
      telegram)
        echo "   Telegram 数字 ID（可向 @userinfobot 获取）"
        ;;
    esac
    read -r -p "   > " RECIPIENT
  fi
  success "接收者：$RECIPIENT"
  echo ""

  # 每日激活时间
  if [[ -z "$DAILY_HOUR" ]]; then
    echo -e "${BOLD}4. 每天几点自动发日报并设置提醒？${RESET}"
    echo "   （建议比第一个会议早 1-2 小时，例如 7 表示早上 7:00）"
    read -r -p "   > [7]: " DAILY_HOUR
    DAILY_HOUR="${DAILY_HOUR:-7}"
  fi
  success "每日激活时间：${DAILY_HOUR}:00"
  echo ""

  # 是否发日报
  if [[ "$SEND_SUMMARY" == "true" && "$NON_INTERACTIVE" -eq 0 ]]; then
    echo -e "${BOLD}5. 每天激活时是否同时发今日日程摘要？${RESET}"
    read -r -p "   [Y/n]: " SEND_INPUT
    [[ "${SEND_INPUT,,}" == "n" ]] && SEND_SUMMARY="false"
  fi
  echo ""
fi

# 校验 hour
DAILY_HOUR="${DAILY_HOUR:-7}"
if ! [[ "$DAILY_HOUR" =~ ^[0-9]+$ ]] || [[ "$DAILY_HOUR" -lt 0 || "$DAILY_HOUR" -gt 23 ]]; then
  error "激活小时必须是 0-23 的整数，当前值：$DAILY_HOUR"
  exit 1
fi

# ── 写入配置文件 ──────────────────────────────────────────
mkdir -p "$CONFIG_DIR"
cat > "$CONFIG_FILE" <<EOF
# 日程提醒助手配置
# 由 setup.sh 生成，修改后重启对应 cron 任务生效

SCHEDULE_FILE="${SCHEDULE_FILE}"
SCHEDULE_CHANNEL="${CHANNEL}"
SCHEDULE_RECIPIENT="${RECIPIENT}"
SCHEDULE_TZ="${TZ_VAL}"
SCHEDULE_ADVANCE_MIN=15
SCHEDULE_DAILY_HOUR=${DAILY_HOUR}
SCHEDULE_DAILY_MIN=0
SCHEDULE_SEND_SUMMARY=${SEND_SUMMARY}
EOF
chmod 600 "$CONFIG_FILE"
success "配置已保存：$CONFIG_FILE"

# ── 注册每日 cron 任务 ───────────────────────────────────
info "注册每日自动激活任务（每天 ${DAILY_HOUR}:00）..."

DAILY_ACTIVATE="${SCRIPT_DIR}/daily_activate.sh"
chmod +x "$DAILY_ACTIVATE"
chmod +x "${SCRIPT_DIR}/create_reminders.sh"
chmod +x "${SCRIPT_DIR}/parse_schedule.py"

TASK_NAME="schedule-reminder-daily-activate"
CRON_EXPR="0 ${DAILY_HOUR} * * *"

# 先删除已有的同名任务（避免重复注册）
openclaw cron remove "$TASK_NAME" 2>/dev/null || true

# 注册新任务：每天激活，通过 agent 执行 daily_activate.sh
# --message 触发 isolated session，agent 收到后执行脚本
openclaw cron add \
  --name "$TASK_NAME" \
  --cron "$CRON_EXPR" \
  --tz "$TZ_VAL" \
  --session isolated \
  --message "请立即在 shell 中执行以下命令（不要等待确认，直接运行）：bash ${DAILY_ACTIVATE}" \
  2>/dev/null

success "已注册每日激活任务：$CRON_EXPR（$TZ_VAL）"

# ── 测试运行（可选）──────────────────────────────────────
echo ""
echo -e "${BOLD}配置完成！${RESET}"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " 日程文件：$SCHEDULE_FILE"
echo " 提醒渠道：$CHANNEL"
echo " 接收者  ：$RECIPIENT"
echo " 每日激活：每天 ${DAILY_HOUR}:00（$TZ_VAL）"
echo " 发日报  ：$SEND_SUMMARY"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "现在立即测试（发送今日日程并设置提醒）？"
read -r -p "[Y/n]: " TEST_INPUT
if [[ "${TEST_INPUT,,}" != "n" ]]; then
  info "正在测试激活..."
  bash "$DAILY_ACTIVATE" && success "测试成功！请检查对话中是否收到消息。" \
    || warn "测试失败，请检查日志：${HOME}/.config/schedule-reminder/logs/"
fi

echo ""
echo -e "${GREEN}✓ 设置完成！${RESET}"
echo "  从明天起，每天 ${DAILY_HOUR}:00 会自动发送日报并设置提醒。"
echo ""
echo "  管理命令："
echo "    查看所有提醒任务：openclaw cron list"
echo "    手动立即激活   ：bash ${DAILY_ACTIVATE}"
echo "    修改配置       ：nano $CONFIG_FILE（改完重新运行 setup.sh --yes）"
echo "    停止每日激活   ：openclaw cron remove $TASK_NAME"
echo ""
