import { NextResponse, type NextRequest } from "next/server" import type { TrafficUser } from "@/types/traffic" import { addUser, getUserById, queryUsers, type UserStatus } from "@/lib/mock-users" // 中文名字生成器数据 const familyNames = [ "张", "王", "李", "赵", "陈", "刘", "杨", "黄", "周", "吴", "朱", "孙", "马", "胡", "郭", "林", "何", "高", "梁", "郑", "罗", "宋", "谢", "唐", "韩", "曹", "许", "邓", "萧", "冯", ] const givenNames1 = [ "志", "建", "文", "明", "永", "春", "秀", "金", "水", "玉", "国", "立", "德", "海", "和", "荣", "伟", "新", "英", "佳", ] const givenNames2 = [ "华", "平", "军", "强", "辉", "敏", "峰", "磊", "超", "艳", "娜", "霞", "燕", "娟", "静", "丽", "涛", "洋", "勇", "龙", ] // 生成固定的用户数据池 const userPool: TrafficUser[] = Array.from({ length: 1610 }, (_, i) => { const familyName = familyNames[Math.floor(Math.random() * familyNames.length)] const givenName1 = givenNames1[Math.floor(Math.random() * givenNames1.length)] const givenName2 = givenNames2[Math.floor(Math.random() * givenNames2.length)] const fullName = Math.random() > 0.5 ? familyName + givenName1 + givenName2 : familyName + givenName1 // 生成随机时间(在过去7天内) const date = new Date() date.setDate(date.getDate() - Math.floor(Math.random() * 7)) return { id: `${Date.now()}-${i}`, avatar: `/placeholder.svg?height=40&width=40&text=${fullName[0]}`, nickname: fullName, wechatId: `wxid_${Math.random().toString(36).substr(2, 8)}`, phone: `1${["3", "5", "7", "8", "9"][Math.floor(Math.random() * 5)]}${Array.from({ length: 9 }, () => Math.floor(Math.random() * 10)).join("")}`, region: [ "广东深圳", "浙江杭州", "江苏苏州", "北京", "上海", "四川成都", "湖北武汉", "福建厦门", "山东青岛", "河南郑州", ][Math.floor(Math.random() * 10)], note: [ "咨询产品价格", "对产品很感兴趣", "准备购买", "需要更多信息", "想了解优惠活动", "询问产品规格", "要求产品demo", "索要产品目录", "询问售后服务", "要求上门演示", ][Math.floor(Math.random() * 10)], status: ["pending", "added", "failed"][Math.floor(Math.random() * 3)] as TrafficUser["status"], addTime: date.toISOString(), source: ["抖音直播", "小红书", "微信朋友圈", "视频号", "公众号", "个人主页"][Math.floor(Math.random() * 6)], assignedTo: "", category: ["potential", "customer", "lost"][Math.floor(Math.random() * 3)] as TrafficUser["category"], tags: [], } }) // 计算今日新增数量 const todayStart = new Date() todayStart.setHours(0, 0, 0, 0) const todayUsers = userPool.filter((user) => new Date(user.addTime) >= todayStart) // 生成微信好友数据池 const generateWechatFriends = (wechatId: string, count: number) => { return Array.from({ length: count }, (_, i) => { const familyName = familyNames[Math.floor(Math.random() * familyNames.length)] const givenName1 = givenNames1[Math.floor(Math.random() * givenNames1.length)] const givenName2 = givenNames2[Math.floor(Math.random() * givenNames2.length)] const fullName = Math.random() > 0.5 ? familyName + givenName1 + givenName2 : familyName + givenName1 // 生成随机时间(在过去30天内) const date = new Date() date.setDate(date.getDate() - Math.floor(Math.random() * 30)) return { id: `wechat-${wechatId}-${i}`, avatar: `/placeholder.svg?height=40&width=40&text=${fullName[0]}`, nickname: fullName, wechatId: `wxid_${Math.random().toString(36).substr(2, 8)}`, phone: `1${["3", "5", "7", "8", "9"][Math.floor(Math.random() * 5)]}${Array.from({ length: 9 }, () => Math.floor(Math.random() * 10)).join("")}`, region: [ "广东深圳", "浙江杭州", "江苏苏州", "北京", "上海", "四川成都", "湖北武汉", "福建厦门", "山东青岛", "河南郑州", ][Math.floor(Math.random() * 10)], note: [ "咨询产品价格", "对产品很感兴趣", "准备购买", "需要更多信息", "想了解优惠活动", "询问产品规格", "要求产品demo", "索要产品目录", "询问售后服务", "要求上门演示", ][Math.floor(Math.random() * 10)], status: ["pending", "added", "failed"][Math.floor(Math.random() * 3)] as TrafficUser["status"], addTime: date.toISOString(), source: ["抖音直播", "小红书", "微信朋友圈", "视频号", "公众号", "个人主页", "微信好友"][ Math.floor(Math.random() * 7) ], assignedTo: "", category: ["potential", "customer", "lost"][Math.floor(Math.random() * 3)] as TrafficUser["category"], tags: [], } }) } // 微信好友数据缓存 const wechatFriendsCache = new Map() function parseArrayParam(v: string | null) { if (!v) return [] return v .split(",") .map((s) => s.trim()) .filter(Boolean) } export async function GET(req: NextRequest) { const { searchParams } = new URL(req.url) // 详情优先 const id = searchParams.get("id") if (id) { const detail = getUserById(id) return NextResponse.json({ data: detail }, { headers: { "Cache-Control": "no-store" } }) } // 列表 const q = searchParams.get("q") ?? undefined const tagsStr = searchParams.get("tags") ?? "" const statusStr = searchParams.get("status") ?? "" const rfmMin = Number(searchParams.get("rfmMin") ?? 0) const rfmMax = Number(searchParams.get("rfmMax") ?? 100) const page = Number(searchParams.get("page") ?? 1) const pageSize = Number(searchParams.get("pageSize") ?? 20) const tags = tagsStr ? tagsStr.split(",").filter(Boolean) : undefined const status = statusStr ? (statusStr.split(",").filter(Boolean) as UserStatus[]) : undefined const result = queryUsers({ q, tags, status, rfmMin, rfmMax, page, pageSize }) return NextResponse.json(result, { headers: { "Cache-Control": "no-store" } }) } export async function POST(req: NextRequest) { const body = await req.json().catch(() => ({})) const created = addUser(body ?? {}) return NextResponse.json({ data: created }, { status: 201 }) }