#!/usr/bin/env bash
#
# pi-search: 为 pi 设计的搜索包装脚本
# 基于 ddgr (DuckDuckGo CLI)
# 
# 使用方法:
#   pi-search "关键词" [-n 数量] [-t 时间] [-w 站点] [-r 地区]
#
# 示例:
#   pi-search "少数派" -n 5
#   pi-search "AI新闻" -n 10 -t w
#   pi-search "教程" -w sspai.com

set -e

# 默认值
KEYWORD=""
NUM=10
TIME=""
SITE=""
REGION=""

# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -n|--num)
            NUM="$2"
            shift 2
            ;;
        -t|--time)
            TIME="$2"
            shift 2
            ;;
        -w|--site)
            SITE="$2"
            shift 2
            ;;
        -r|--region)
            REGION="$2"
            shift 2
            ;;
        -h|--help)
            echo "用法: pi-search \"关键词\" [选项]"
            echo ""
            echo "选项:"
            echo "  -n, --num NUM       返回结果数量 (0-25, 默认 10)"
            echo "  -t, --time SPAN     时间限制: d(1天), w(1周), m(1月), y(1年)"
            echo "  -w, --site SITE     限定搜索站点，如: sspai.com"
            echo "  -r, --region REG    地区代码，如: cn-zh(中国), us-en(美国)"
            echo "  -h, --help          显示帮助"
            echo ""
            echo "示例:"
            echo "  pi-search \"少数派写作指南\" -n 5"
            echo "  pi-search \"AI新闻\" -n 10 -t w -r cn-zh"
            echo "  pi-search \"方法论\" -w sspai.com"
            exit 0
            ;;
        -*)
            echo "错误: 未知选项 $1" >&2
            echo "使用 -h 查看帮助" >&2
            exit 1
            ;;
        *)
            if [[ -z "$KEYWORD" ]]; then
                KEYWORD="$1"
            else
                KEYWORD="$KEYWORD $1"
            fi
            shift
            ;;
    esac
done

if [[ -z "$KEYWORD" ]]; then
    echo "错误: 请提供搜索关键词" >&2
    echo "使用 -h 查看帮助" >&2
    exit 1
fi

# 构建 ddgr 参数
DDGR_ARGS=("--json" "--noprompt" "--noua" "--num" "$NUM")

if [[ -n "$TIME" ]]; then
    DDGR_ARGS+=("--time" "$TIME")
fi

if [[ -n "$SITE" ]]; then
    DDGR_ARGS+=("--site" "$SITE")
fi

if [[ -n "$REGION" ]]; then
    DDGR_ARGS+=("--reg" "$REGION")
fi

# 执行搜索并格式化输出
echo "{"
echo "  \"搜索关键词\": \"$KEYWORD\","
echo "  \"结果数量\": $NUM,"
if [[ -n "$TIME" ]]; then
    echo "  \"时间限制\": \"$TIME\","
fi
if [[ -n "$SITE" ]]; then
    echo "  \"限定站点\": \"$SITE\","
fi
if [[ -n "$REGION" ]]; then
    echo "  \"地区\": \"$REGION\","
fi

# 执行 ddgr 并处理输出
RESULT=$(ddgr "${DDGR_ARGS[@]}" "$KEYWORD" 2>&1) || {
    echo "  \"错误\": \"搜索失败\","
    echo "  \"结果\": []"
    echo "}"
    exit 1
}

# 解析 ddgr 的 JSON 并转换为标准格式
if echo "$RESULT" | jq -e '. | length > 0' > /dev/null 2>&1; then
    COUNT=$(echo "$RESULT" | jq 'length')
    echo "  \"实际返回\": $COUNT,"
    echo "  \"结果\": ["
    
    # 转换格式
    echo "$RESULT" | jq -r '. | to_entries | .[] | 
        "    {\"序号\": " + (.key + 1 | tostring) + ", " +
        "\"标题\": " + (.value.title | @json) + ", " +
        "\"链接\": " + (.value.url | @json) + ", " +
        "\"摘要\": " + (.value.abstract | @json) + "}"' | 
    sed '$!s/$/,/'
    
    echo "  ]"
else
    echo "  \"实际返回\": 0,"
    echo "  \"结果\": []"
fi

echo "}"
