import { initContract } from '@ts-rest/core'; import { z } from 'zod'; import { sendWhatsappBodySchema, whatsappPairSchema, whatsappMessageSchema, incomingWhatsappSchema, deliveryStatusWebhookSchema, } from '../schemas/shopkeeper-whatsapp.schemas'; import { errorResponseSchema, successResponseSchema, paginationQuerySchema, paginationResponseSchema, } from '../schemas/common.schemas'; const c = initContract(); export const shopkeeperWhatsappContract = c.router({ pairWhatsapp: { method: 'POST', path: '/shopkeeper/whatsapp/pair', body: whatsappPairSchema, responses: { 200: z.object({ paired: z.boolean(), message: z.string().optional() }), 400: errorResponseSchema, 401: errorResponseSchema, }, summary: 'Link owner WhatsApp number', }, unpairWhatsapp: { method: 'POST', path: '/shopkeeper/whatsapp/unpair', body: z.object({}), responses: { 200: successResponseSchema, 401: errorResponseSchema }, summary: 'Unlink WhatsApp', }, sendMessage: { method: 'POST', path: '/shopkeeper/whatsapp/send', body: sendWhatsappBodySchema, responses: { 200: successResponseSchema, 400: errorResponseSchema, 401: errorResponseSchema }, summary: 'Queue outbound message', }, listMessages: { method: 'GET', path: '/shopkeeper/whatsapp/messages', query: z .object({ messageType: z.string().optional(), direction: z.string().optional() }) .merge(paginationQuerySchema), responses: { 200: z.object({ messages: z.array(whatsappMessageSchema), pagination: paginationResponseSchema, }), 401: errorResponseSchema, }, summary: 'Get message history', }, incomingWebhook: { method: 'POST', path: '/shopkeeper/whatsapp/webhook', body: incomingWhatsappSchema, responses: { 200: z.object({ received: z.boolean() }), 400: errorResponseSchema }, summary: 'WAPI.js incoming webhook', }, deliveryStatusWebhook: { method: 'POST', path: '/shopkeeper/whatsapp/webhook/status', body: deliveryStatusWebhookSchema, responses: { 200: z.object({ updated: z.boolean() }), 400: errorResponseSchema }, summary: 'Provider delivery status callback', }, updateAutoReply: { method: 'PATCH', path: '/shopkeeper/whatsapp/auto-reply', body: z.object({ enabled: z.boolean().optional(), afterHoursMessage: z.string().optional(), }), responses: { 200: successResponseSchema, 401: errorResponseSchema }, summary: 'Configure auto-reply settings', }, updateAutoReplyPost: { method: 'POST', path: '/shopkeeper/whatsapp/auto-reply', body: z.object({ enabled: z.boolean().optional(), afterHoursMessage: z.string().optional(), }), responses: { 200: successResponseSchema, 401: errorResponseSchema }, summary: 'Configure auto-reply settings (POST for mobile compatibility)', }, });