import { initContract } from '@ts-rest/core'; import { z } from 'zod'; import { dailyReportSchema } from '../schemas/shopkeeper.schemas'; import { errorResponseSchema, successResponseSchema } from '../schemas/common.schemas'; const c = initContract(); export const shopkeeperReportsContract = c.router({ getDailyReport: { method: 'GET', path: '/shopkeeper/reports/daily', query: z.object({ date: z.coerce.date() }), responses: { 200: dailyReportSchema.nullable(), 401: errorResponseSchema, }, summary: 'Get report for specific date', }, getReportRange: { method: 'GET', path: '/shopkeeper/reports/range', query: z.object({ from: z.coerce.date(), to: z.coerce.date(), }), responses: { 200: z.object({ reports: z.array(dailyReportSchema), summary: z.object({ totalSales: z.number(), totalTransactions: z.number(), }), }), 401: errorResponseSchema, }, summary: 'Get report data for date range', }, downloadPdf: { method: 'GET', path: '/shopkeeper/reports/pdf', query: z.object({ from: z.coerce.date(), to: z.coerce.date() }), responses: { 200: z.any(), 401: errorResponseSchema, }, summary: 'Generate and download PDF report', }, triggerDailyReport: { method: 'POST', path: '/shopkeeper/reports/trigger', body: z.object({ date: z.coerce.date().optional() }), responses: { 200: z.object({ report: dailyReportSchema }), 401: errorResponseSchema, }, summary: 'Manually trigger daily report generation', }, sendDailyReport: { method: 'POST', path: '/shopkeeper/reports/daily/send', body: z.object({}), query: z.object({ date: z.coerce.date() }), responses: { 200: successResponseSchema, 400: errorResponseSchema, 401: errorResponseSchema, }, summary: 'Generate daily report and send to owner WhatsApp', }, getFinancialStatement: { method: 'GET', path: '/shopkeeper/reports/financial-statement', query: z.object({ months: z.coerce.number().int().min(1).max(24).default(6), format: z.enum(['pdf', 'csv', 'json']).default('json'), }), responses: { 200: z.object({ format: z.enum(['pdf', 'csv', 'json']), pdfBase64: z.string().optional(), csv: z.string().optional(), json: z.record(z.unknown()).optional(), filename: z.string().optional(), }), 401: errorResponseSchema, }, summary: 'P&L-style aggregates from daily reports for banks / lenders', }, });