import { z } from 'zod';

const TemplateEnvEntrySchema = z.object({
  name: z.string().min(1),
  description: z.string().optional(),
  required: z.boolean().optional(),
  defaultValue: z.string().optional(),
});

export const HealthCheckSchema = z.object({
  tool: z.string().min(1),
  arguments: z.record(z.unknown()).default({}),
  intervalSeconds: z.number().int().min(5).max(3600).default(60),
  timeoutSeconds: z.number().int().min(1).max(120).default(10),
  failureThreshold: z.number().int().min(1).max(20).default(3),
});

export type HealthCheckInput = z.infer<typeof HealthCheckSchema>;

export const CreateTemplateSchema = z.object({
  name: z.string().min(1).max(100).regex(/^[a-z0-9-]+$/, 'Name must be lowercase alphanumeric with hyphens'),
  version: z.string().default('1.0.0'),
  description: z.string().default(''),
  packageName: z.string().optional(),
  runtime: z.string().max(50).optional(),
  dockerImage: z.string().optional(),
  transport: z.enum(['STDIO', 'SSE', 'STREAMABLE_HTTP']).default('STDIO'),
  repositoryUrl: z.string().optional(),
  externalUrl: z.string().optional(),
  command: z.array(z.string()).optional(),
  containerPort: z.number().int().min(1).max(65535).optional(),
  replicas: z.number().int().min(0).max(10).default(1),
  env: z.array(TemplateEnvEntrySchema).default([]),
  healthCheck: HealthCheckSchema.optional(),
});

export const UpdateTemplateSchema = CreateTemplateSchema.partial().omit({ name: true });

export type CreateTemplateInput = z.infer<typeof CreateTemplateSchema>;
export type UpdateTemplateInput = z.infer<typeof UpdateTemplateSchema>;
