const { drizzle } = require('drizzle-orm/node-postgres');
const { Pool } = require('pg');
const { sql, gt, desc } = require('drizzle-orm');
const { vercelAiEmbeddings } = require('./schema.service');
const config = require('../../config');

const { cosineDistance } = require('drizzle-orm/sql');
const pool = new Pool({
  connectionString: config.DATABASE_URL,
  min: 2,
  max: 10,
});

const db = drizzle(pool);

// 实现相似度查询
async function findSimilarContent(userQueryEmbedded) {
  // 手动将数组转换为 PostgreSQL 支持的数组格式
  const embeddingArray = `{${userQueryEmbedded.join(',')}}`;

  // 使用 sql 模板字面量构建原始 SQL 查询
  //   const similarity = sql`1 - (cosine_distance(${vercelAiEmbeddings.embedding}, ${embeddingArray}::float[]))`;
  const similarity = sql`1 - (${cosineDistance(vercelAiEmbeddings.embedding, userQueryEmbedded)})`;
  return db
    .select({
      content: vercelAiEmbeddings.content,
      similarity,
    })
    .from(vercelAiEmbeddings)
    .where(gt(similarity, 0.5)) // 过滤相似度大于 0.5 的结果
    .orderBy((t) => desc(t.similarity)) // 按相似度降序排列
    .limit(4); // 限制返回 4 条结果
}

module.exports = {
  db,
  findSimilarContent,
};