import { z } from "zod";

import { PropertyEnum } from "@/types/property-master";
import { CONSTANTS } from "@/constants/constants";
import { zodResolver } from "@hookform/resolvers/zod";

const { SIZE, AMENITY, CONFIGURATION } = CONSTANTS;

export const createDynamicResolver = (property: PropertyEnum) => {
  const baseSchema = z.object({
    name: z.string().min(1, "Name is required"),
  });

  const sizeSchema = baseSchema.extend({
    inSqFeet: z.coerce
      .number({
        invalid_type_error: "Size in Sq Feet must be a number",
        required_error: "Size in Sq Feet is required",
      })
      .min(1, "Size in Sq Feet must be at least 1")
      .default(0),
  });

  const amenitySchema = baseSchema.extend({
    description: z.string(),
  });

  const configurationSchema = baseSchema.extend({
    category: z
      .string({
        required_error: "Category is required",
      })
      .min(1, "Category is required"),
    subCategory: z
      .string({
        required_error: "Sub Category is required",
      })
      .min(1, "Sub Category is required"),
  });

  const schema =
    property === SIZE
      ? sizeSchema
      : property === AMENITY
      ? amenitySchema
      : property === CONFIGURATION
      ? configurationSchema
      : baseSchema;

  return zodResolver(schema);
};
