import { Injectable, NotFoundException } from '@nestjs/common';
import { PrismaService } from '../../common/prisma.service';

@Injectable()
export class SupportService {
  constructor(private prisma: PrismaService) {}

  getFaqCategories() { return this.prisma.faqCategory.findMany({ include: { _count: { select: { articles: true } } } }); }

  getFaqArticles(categoryId: string) { return this.prisma.faqArticle.findMany({ where: { categoryId }, orderBy: { rank: 'asc' } }); }

  startConversation(userId: string) { return this.prisma.supportConversation.create({ data: { userId } }); }

  async sendMessage(conversationId: string, sender: 'USER' | 'BOT' | 'AGENT', text: string) {
    const conv = await this.prisma.supportConversation.findUnique({ where: { id: conversationId } });
    if (!conv) throw new NotFoundException('Conversation not found');
    const message = await this.prisma.supportMessage.create({ data: { conversationId, sender, text } });
    if (sender === 'USER') await this.prisma.supportMessage.create({ data: { conversationId, sender: 'BOT', text: this.getBotReply(text) } });
    return message;
  }

  async getConversation(conversationId: string) {
    const conv = await this.prisma.supportConversation.findUnique({ where: { id: conversationId }, include: { messages: { orderBy: { createdAt: 'asc' } } } });
    if (!conv) throw new NotFoundException('Conversation not found');
    return conv;
  }

  private getBotReply(text: string): string {
    const lower = text.toLowerCase();
    if (lower.includes('cancel') || lower.includes('refund')) return 'To cancel or refund, go to Bookings and select the booking. Refunds are processed within 3-5 business days.';
    if (lower.includes('miss') || lower.includes('missed')) return 'If you missed your train, please check the Disruptions section for alternative options.';
    if (lower.includes('seat')) return 'You can select or change seats during booking. Seat changes after confirmation may incur a fee.';
    return 'Thank you for contacting EDR support. An agent will assist you shortly.';
  }
}
