import { Injectable, ServiceUnavailableException } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { NotificationChannel } from '@prisma/client';
import { NotificationsService } from '../notifications/notifications.service';
import { DemoRequestDto } from './leads.controller';

@Injectable()
export class LeadsService {
  constructor(
    private readonly config: ConfigService,
    private readonly notifications: NotificationsService,
  ) {}

  async requestDemo(dto: DemoRequestDto) {
    const recipient = this.config.get<string>('DEMO_REQUEST_RECIPIENT_EMAIL');
    if (!recipient) {
      throw new ServiceUnavailableException('Demo request recipient is not configured');
    }

    const name = `${dto.firstName} ${dto.lastName}`.trim();
    await this.notifications.send({
      tenantId: null,
      userId: null,
      channel: NotificationChannel.EMAIL,
      template: 'public_demo_request',
      recipient,
      subject: `Demande de demo SyndiClub - ${name}`,
      body: [
        'Nouvelle demande de demo SyndiClub.',
        '',
        `Nom: ${name}`,
        `Email: ${dto.email}`,
        `Telephone: ${dto.phone || 'Non renseigne'}`,
        `Cabinet / Structure: ${dto.company || 'Non renseigne'}`,
        `Nombre de lots: ${dto.lots || 'Non renseigne'}`,
        '',
        'Contexte:',
        dto.message || 'Non renseigne',
      ].join('\n'),
      metadata: {
        source: 'marketing-demo-form',
        requesterEmail: dto.email,
      },
    });

    return { ok: true };
  }
}
