/**
 * Copyright IBM Corp. 2024, 2025
 */

import { z } from 'zod';

export const MetadataModel = z.object({
  name: z.string(),
  version: z.string(),
  tags: z.array(z.string()).optional(),
  namespace: z.string(),
  type: z.string().optional(),
  // types: z.enum(["REST", "SWAGGER", "SOAP", "GRAPHQL", "ODATA"]).optional(),
  description: z.string().optional(),
});

export const BaseModel = z.object({
  kind: z.string(),
  metadata: MetadataModel,
  spec: z.object({}),
  kindEnum: z.string().optional(),
  apiVersion: z.string().optional(),
});

export const IfConditionSchema = z
  .union([
    z.boolean(),
    z.string().refine(
      (val) => {
        try {
          const hasVariable = /\$\{[^}]+\}/.test(val); // Ensure there's at least one ${...}
          if (!hasVariable) return false;

          return true;
        } catch {
          return false;
        }
      },
      {
        message: 'Invalid condition: not a valid JavaScript expression',
      },
    ),
  ])
  .optional()
  .default(true);

export const StopOnFailSchema = z.boolean().optional().default(false);
export const RequestSkippedSchema = z.boolean().optional().default(false);
