#!/bin/bash
"""
爬虫数据推送工具 — 将最新爬取的数据导入搜索库
用法: bash push_to_search.sh [可选: 指定CSV或JSONL文件]

如果不指定文件，自动找 output/ 下最新的结果文件
"""

set -e

SSH_KEY="$HOME/Downloads/KeyPair-a00a.pem"
SERVER="root@1.94.217.116"
CRAWLER_DIR="$HOME/gov_crawler"

echo "🔍 爬虫数据推送工具"
echo "===================="

# 如果没有指定文件，自动找最新输出
if [ -z "$1" ]; then
    echo "未指定文件，自动查找最新输出..."
    
    # 找最新的JSONL
    LATEST_JSONL=$(ls -t "$CRAWLER_DIR/output"/gov_list_success_*.jsonl 2>/dev/null | head -1)
    # 找最新的CSV
    LATEST_CSV=$(ls -t "$CRAWLER_DIR/output"/gov_list_result_*.csv 2>/dev/null | head -1)
    
    if [ -n "$LATEST_JSONL" ] && [ -n "$LATEST_CSV" ]; then
        # 选最新的
        if [ "$LATEST_JSONL" -nt "$LATEST_CSV" ]; then
            FILE="$LATEST_JSONL"
            echo "  使用JSONL: $FILE"
        else
            FILE="$LATEST_CSV"
            echo "  使用CSV: $FILE"
        fi
    elif [ -n "$LATEST_JSONL" ]; then
        FILE="$LATEST_JSONL"
        echo "  使用JSONL: $FILE"
    elif [ -n "$LATEST_CSV" ]; then
        FILE="$LATEST_CSV"
        echo "  使用CSV: $FILE"
    else
        echo "❌ 找不到输出文件！"
        echo "   请先运行爬虫，或指定文件路径"
        exit 1
    fi
else
    FILE="$1"
    if [ ! -f "$FILE" ]; then
        echo "❌ 文件不存在: $FILE"
        exit 1
    fi
    echo "  使用指定文件: $FILE"
fi

# 获取文件名
BASENAME=$(basename "$FILE")
SIZE=$(du -h "$FILE" | cut -f1)
echo ""
echo "📁 文件: $BASENAME ($SIZE)"

# 压缩后传输
echo "🚀 传输到服务器..."
gzip -c "$FILE" | ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SERVER" \
    "cat > /tmp/$BASENAME.gz && gunzip -f /tmp/$BASENAME.gz && echo '✅ 传输完成: $(ls -lh /tmp/$BASENAME 2>/dev/null | awk '{print $5}')'"

# 在服务器上导入
echo ""
echo "🔄 导入到搜索库..."
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SERVER" \
    "cd /root && python3 import_data.py /tmp/$BASENAME 2>&1"

# 清理临时文件
echo ""
echo "🧹 清理临时文件..."
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SERVER" \
    "rm -f /tmp/$BASENAME"

echo ""
echo "✅ 完成！"
