import { z } from 'zod';

const qrStyleSchema = z.object({
  fg: z.string().regex(/^#?[0-9a-fA-F]{3,8}$/).optional(),
  bg: z.string().regex(/^#?[0-9a-fA-F]{3,8}$/).optional(),
  margin: z.number().int().min(0).max(8).optional(),
  ecc: z.enum(['L', 'M', 'Q', 'H']).optional(),
  logo_url: z.string().url().nullable().optional(),
  caption: z.string().max(64).nullable().optional(),
}).partial().optional();

export const createTableSchema = z.object({
  branch_id: z.string().uuid('branch_id must be a valid UUID'),
  table_number: z.string().min(1, 'table_number is required').max(32),
  label: z.string().max(64).nullable().optional(),
  capacity: z.number().int().min(1).max(64).optional(),
  zone: z.string().max(64).nullable().optional(),
  qr_style_json: qrStyleSchema,
  is_active: z.boolean().optional(),
});

export const updateTableSchema = z.object({
  table_number: z.string().min(1).max(32).optional(),
  label: z.string().max(64).nullable().optional(),
  capacity: z.number().int().min(1).max(64).optional(),
  zone: z.string().max(64).nullable().optional(),
  qr_style_json: qrStyleSchema,
  is_active: z.boolean().optional(),
});

export const bulkCreateTablesSchema = z.object({
  branch_id: z.string().uuid(),
  start: z.number().int().min(1).max(9999),
  end: z.number().int().min(1).max(9999),
  prefix: z.string().max(16).optional(),
  capacity: z.number().int().min(1).max(64).optional(),
  zone: z.string().max(64).nullable().optional(),
}).refine((d) => d.end >= d.start, { message: 'end must be >= start' });

export type CreateTableInput = z.infer<typeof createTableSchema>;
export type UpdateTableInput = z.infer<typeof updateTableSchema>;
export type BulkCreateTablesInput = z.infer<typeof bulkCreateTablesSchema>;
