#!/bin/bash
# =============================================
# 日程管家 · 腾讯云一键部署脚本
# =============================================
# 用法: bash setup.sh
# 前提: 服务器已安装 python3
# =============================================
set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

INSTALL_DIR="/opt/schedule"
SERVICE_NAME="schedule-api"
SERVER_USER="${SUDO_USER:-$USER}"

echo -e "${GREEN}=========================================${NC}"
echo -e "${GREEN}  日程管家 · 腾讯云部署${NC}"
echo -e "${GREEN}=========================================${NC}"
echo ""

# ─── 1. 检查 Python ───
if ! command -v python3 &>/dev/null; then
    echo -e "${YELLOW}未检测到 python3，正在安装...${NC}"
    if command -v apt-get &>/dev/null; then
        apt-get update && apt-get install -y python3
    elif command -v yum &>/dev/null; then
        yum install -y python3
    else
        echo -e "${RED}请先手动安装 Python 3${NC}"
        exit 1
    fi
fi

echo -e "${GREEN}[OK] Python: $(python3 --version)${NC}"

# ─── 2. 复制文件 ───
echo "正在部署文件到 ${INSTALL_DIR} ..."

# 复制整个 schedule 目录（排除 deploy 子目录，避免递归）
mkdir -p "${INSTALL_DIR}"
cp -r "$(cd "$(dirname "$0")/.." && pwd)"/* "${INSTALL_DIR}/"
rm -rf "${INSTALL_DIR}/deploy"  # 清理部署脚本自身

# 确保 data 目录存在
mkdir -p "${INSTALL_DIR}/data"

# 如果没有数据文件，创建默认的
if [ ! -f "${INSTALL_DIR}/data/tasks.json" ]; then
    cat > "${INSTALL_DIR}/data/tasks.json" << 'EOF'
{
  "_description": "统一任务数据库",
  "tasks": [],
  "_last_scan": null
}
EOF
fi

if [ ! -f "${INSTALL_DIR}/data/projects.json" ]; then
    cat > "${INSTALL_DIR}/data/projects.json" << 'EOF'
{
  "_description": "项目空间映射配置",
  "projects": [
    {
      "id": "ai-qifu",
      "name": "AI企服外脑",
      "workspace": "",
      "color": "#1E4DB7",
      "icon": "brain",
      "description": "AI企业服务业务体系构建"
    },
    {
      "id": "ai-qifu-os",
      "name": "AI企服操作系统",
      "workspace": "",
      "color": "#7F77DD",
      "icon": "cpu",
      "description": "Agent Studio 工具层开发"
    },
    {
      "id": "hro-system",
      "name": "HRO AI原生系统",
      "workspace": "",
      "color": "#1D9E75",
      "icon": "users",
      "description": "HRO AI原生系统设计开发"
    },
    {
      "id": "personal",
      "name": "个人事务",
      "workspace": "",
      "color": "#E8A838",
      "icon": "calendar",
      "description": "个人日程与生活事务"
    }
  ]
}
EOF
fi

# 如果没有 daily_plan.json，创建空的
if [ ! -f "${INSTALL_DIR}/data/daily_plan.json" ]; then
    echo '{}' > "${INSTALL_DIR}/data/daily_plan.json"
fi

chown -R "${SERVER_USER}:${SERVER_USER}" "${INSTALL_DIR}"
echo -e "${GREEN}[OK] 文件已部署到 ${INSTALL_DIR}${NC}"

# ─── 3. 配置环境变量 ───
echo ""
echo -e "${YELLOW}请输入部署信息:${NC}"
read -p "  服务器 IP 或域名（如 123.456.789.0 或 schedule.example.com）: " SERVER_IP
read -p "  端口（默认 8765）: " SERVER_PORT
SERVER_PORT="${SERVER_PORT:-8765}"

# 检测是否使用 HTTPS
if [[ "$SERVER_IP" == *"."* && "$SERVER_IP" != *[0-9].[0-9]* ]]; then
    DASHBOARD_URL="https://${SERVER_IP}:${SERVER_PORT}/dashboard.html"
else
    DASHBOARD_URL="http://${SERVER_IP}:${SERVER_PORT}/dashboard.html"
fi

# 写入环境配置文件
cat > "${INSTALL_DIR}/.env" << EOF
# 日程管家环境配置
SCHEDULE_HOST=0.0.0.0
SCHEDULE_PORT=${SERVER_PORT}
DASHBOARD_URL=${DASHBOARD_URL}
EOF

echo -e "${GREEN}[OK] 环境配置已写入 .env${NC}"

# ─── 4. 安装 systemd 服务 ───
echo ""
echo "正在注册 systemd 服务..."

cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF
[Unit]
Description=日程管家 API 服务
After=network.target

[Service]
Type=simple
User=${SERVER_USER}
WorkingDirectory=${INSTALL_DIR}
EnvironmentFile=${INSTALL_DIR}/.env
ExecStart=/usr/bin/python3 ${INSTALL_DIR}/server.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable "${SERVICE_NAME}"
systemctl start "${SERVICE_NAME}"

sleep 2
if systemctl is-active --quiet "${SERVICE_NAME}"; then
    echo -e "${GREEN}[OK] 服务已启动${NC}"
else
    echo -e "${RED}[FAIL] 服务启动失败，请检查: systemctl status ${SERVICE_NAME}${NC}"
    systemctl status "${SERVICE_NAME}" --no-pager
    exit 1
fi

# ─── 5. 配置定时推送 (cron) ───
echo ""
echo "正在配置定时推送..."

TMP_CRON=$(mktemp)
crontab -u "${SERVER_USER}" -l 2>/dev/null | grep -v "schedule/daily_push" > "${TMP_CRON}" || true

cat >> "${TMP_CRON}" << EOF
# 日程管家 — 工作日早8点每日推送
0 8 * * 1-5 cd ${INSTALL_DIR} && DASHBOARD_URL="${DASHBOARD_URL}" /usr/bin/python3 ${INSTALL_DIR}/daily_push.py daily >> ${INSTALL_DIR}/logs/push.log 2>&1

# 日程管家 — 周日晚8点每周概览
0 20 * * 7 cd ${INSTALL_DIR} && DASHBOARD_URL="${DASHBOARD_URL}" /usr/bin/python3 ${INSTALL_DIR}/daily_push.py weekly >> ${INSTALL_DIR}/logs/push.log 2>&1
EOF

crontab -u "${SERVER_USER}" "${TMP_CRON}"
rm -f "${TMP_CRON}"

mkdir -p "${INSTALL_DIR}/logs"
chown -R "${SERVER_USER}:${SERVER_USER}" "${INSTALL_DIR}/logs"

echo -e "${GREEN}[OK] 定时推送已配置${NC}"

# ─── 6. 云服务器安全组提示 ───
echo ""
echo -e "${GREEN}=========================================${NC}"
echo -e "${GREEN}  部署完成！${NC}"
echo -e "${GREEN}=========================================${NC}"
echo ""
echo -e "  日程看板: ${GREEN}${DASHBOARD_URL}${NC}"
echo ""
echo -e "${YELLOW}  ⚠ 请在腾讯云安全组中开放端口 ${SERVER_PORT}:${NC}"
echo "     控制台 → 云服务器 → 安全组 → 添加入站规则"
echo "     协议: TCP  |  端口: ${SERVER_PORT}  |  来源: 0.0.0.0/0"
echo ""
echo -e "  管理命令:"
echo "    启动: systemctl start ${SERVICE_NAME}"
echo "    停止: systemctl stop ${SERVICE_NAME}"
echo "    状态: systemctl status ${SERVICE_NAME}"
echo "    日志: journalctl -u ${SERVICE_NAME} -f"
echo ""
echo -e "  推送日志: tail -f ${INSTALL_DIR}/logs/push.log"
