import type { FastifyBaseLogger } from 'fastify';
import type { Server as SocketServer } from 'socket.io';
import type { Channel, Ticket } from '@wa-ticketing/shared';
import { signupService } from './signupService.js';
import { ticketService } from './ticketService.js';
import { sendAutomatedOutbound } from './automatedOutboundService.js';

/** Run the signup chat flow as automated outbound messages on a WhatsApp ticket. */
export const waSignupTalkbackService = {
  async handleInbound(opts: {
    io: SocketServer;
    log: FastifyBaseLogger;
    ticket: Ticket;
    channel: Channel;
    contactPhone: string;
    inboundText: string;
  }): Promise<void> {
    const { io, log, ticket, channel, contactPhone, inboundText } = opts;

    let sessionId = ticket.signup_session_id ?? null;
    if (sessionId && !(await signupService.isSessionUsable(sessionId))) {
      await ticketService.setSignupSessionId(ticket.id, null);
      sessionId = null;
    }

    const { sessionId: nextSessionId, messages } = await signupService.processWhatsAppInbound({
      sessionId,
      message: inboundText,
      knownPhone: contactPhone,
    });

    if (nextSessionId !== sessionId) {
      await ticketService.setSignupSessionId(ticket.id, nextSessionId);
    }

    for (const text of messages) {
      const trimmed = text.trim();
      if (!trimmed) continue;
      await sendAutomatedOutbound({
        io,
        ticketId: ticket.id,
        channelId: channel.id,
        contactPhone,
        text: trimmed,
      });
    }

    log.info({ ticketId: ticket.id, sessionId: nextSessionId }, '[waSignup] processed inbound');
  },
};
