import { z } from 'zod'; import { timestampSchema } from './common.schemas'; export const installerSchema = z .object({ id: z.string().uuid(), name: z.string(), phone: z.string(), email: z.string().nullable(), city: z.string(), market: z.string().nullable(), status: z.enum(['active', 'suspended', 'inactive']), rating: z.number(), totalOnboardings: z.number(), totalEarnings: z.number(), }) .merge(timestampSchema); export const registerInstallerSchema = z.object({ name: z.string().min(1).max(100), phone: z.string().min(10).max(15), password: z.string().min(6).max(128), email: z.string().email().optional(), city: z.string().min(1).max(100), market: z.string().optional(), }); export const onboardingSchema = z .object({ id: z.string().uuid(), installerId: z.string().uuid(), shopPhone: z.string(), shopId: z.string().uuid().nullable(), setupCompleted: z.boolean(), tierConverted: z.string().nullable(), convertedAt: z.coerce.date().nullable(), commissionPaid: z.number(), satisfactionScore: z.number().int().nullable(), followUpDay3: z.boolean(), followUpDay7: z.boolean(), followUpDay14: z.boolean(), }) .merge(timestampSchema); export const logOnboardingSchema = z.object({ shopPhone: z.string().min(10).max(15), setupCompleted: z.boolean().default(false), }); export const logFollowUpSchema = z.object({ onboardingId: z.string().uuid(), day: z.enum(['3', '7', '14']), satisfactionScore: z.number().int().min(1).max(5).optional(), }); export type Installer = z.infer; export type RegisterInstallerInput = z.infer; export type Onboarding = z.infer; export type LogOnboardingInput = z.infer; export type LogFollowUpInput = z.infer;