import { z } from 'zod';

import { ExtractionExampleSchema } from '../extract/types.js';

// ── Task definition schemas ─────────────────────────────────────

export const ExtractionTaskSchema = z.object({
  id: z.string().min(1),
  name: z.string().min(1),
  description: z.string().optional(),
  prompt: z.string().min(1),
  classes: z.array(z.string().min(1)),
  examples: z.array(ExtractionExampleSchema).optional(),
  defaultModelId: z.string().optional(),
  builtIn: z.boolean().default(false),
  productId: z.string(),
  createdAt: z.string().optional(),
  updatedAt: z.string().optional(),
});

export const CreateTaskSchema = z.object({
  id: z.string().min(1),
  name: z.string().min(1),
  description: z.string().optional(),
  prompt: z.string().min(1),
  classes: z.array(z.string().min(1)),
  examples: z.array(ExtractionExampleSchema).optional(),
  defaultModelId: z.string().optional(),
  productId: z.string().optional(),
});

export const UpdateTaskSchema = z.object({
  name: z.string().min(1).optional(),
  description: z.string().optional(),
  prompt: z.string().min(1).optional(),
  classes: z.array(z.string().min(1)).optional(),
  examples: z.array(ExtractionExampleSchema).optional(),
  defaultModelId: z.string().optional(),
});

// ── TypeScript types ────────────────────────────────────────────

export type ExtractionTask = z.infer<typeof ExtractionTaskSchema>;
export type CreateTask = z.infer<typeof CreateTaskSchema>;
export type UpdateTask = z.infer<typeof UpdateTaskSchema>;

// ── Cosmos DB document shape ────────────────────────────────────

export interface ExtractionTaskDoc extends ExtractionTask {
  _ts?: number;
  _etag?: string;
}
