import { Injectable, Logger, NotFoundException } from '@nestjs/common';
import { PrismaService } from '@core/database/prisma/prisma.service';
import { CreateKnowledgeArticleDto, UpdateKnowledgeArticleDto } from './dto/knowledge-article.dto';
import { RagflowSyncService } from './services/ragflow-sync.service';

@Injectable()
export class KnowledgeArticleService {
  private readonly logger = new Logger(KnowledgeArticleService.name);

  constructor(
    private readonly prisma: PrismaService,
    private readonly ragflowSyncService: RagflowSyncService,
  ) {}

  async create(userId: string, dto: CreateKnowledgeArticleDto) {
    const article = await this.prisma.knowledgeArticle.create({
      data: {
        title: dto.title,
        content: dto.content,
        createdById: userId,
      },
    });
    this.triggerArticleSync(article.id);
    return article;
  }

  async findById(id: string) {
    const article = await this.prisma.knowledgeArticle.findUnique({
      where: { id },
    });

    if (!article) {
      throw new NotFoundException({
        code: 'KNOWLEDGE_BASE_NOT_FOUND_001',
        message: '文章不存在',
      });
    }

    return article;
  }

  async update(id: string, dto: UpdateKnowledgeArticleDto) {
    await this.findById(id);
    const article = await this.prisma.knowledgeArticle.update({
      where: { id },
      data: {
        title: dto.title,
        content: dto.content,
      },
    });
    this.triggerArticleSync(article.id);
    return article;
  }

  private triggerArticleSync(articleId: string) {
    this.ragflowSyncService.syncSingleArticle(articleId)
      .catch((error) => {
        this.logger.error(`Failed to sync article ${articleId}: ${error?.message || error}`);
      });
  }
}
