import { mergeChannelSettings, parseTicketIntegrationProvider } from '@wa-ticketing/shared';
import { channelService } from '../channelService.js';
import { ticketService } from '../ticketService.js';
import { ticketSyncService } from './ticketSyncService.js';

/**
 * Create the remote ticket once, on the first message of a new Silicon ticket.
 * Failures are logged and never block inbound/outbound delivery.
 */
export async function maybeAutoSyncFirstEngagement(
  ticketId: string,
  actorId: string | null,
): Promise<void> {
  const ticket = await ticketService.getById(ticketId);
  if (!ticket) return;

  // Use channelService so web chat inherits the primary WhatsApp channel's Ticket sync setting.
  const channel = await channelService.getById(ticket.channel_id);
  if (!channel) return;

  const provider = parseTicketIntegrationProvider(
    mergeChannelSettings(channel.settings).integrations.auto_sync_provider,
  );
  if (!provider) return;

  try {
    await ticketSyncService.sync(ticketId, provider, actorId, {});
  } catch (err: unknown) {
    const status = (err as { statusCode?: number }).statusCode;
    if (status === 409) return;
    console.error(`[ticket-auto-sync] ${provider} failed for ${ticketId}:`, (err as Error).message ?? err);
  }
}
