// import { user } from '@/feactures/auth/schemas/register';
// import { all } from 'axios';
import { z } from 'zod';

export type InventoryTable = z.infer<typeof product>;
export type EditInventory = z.infer<typeof editInventory>;
export type ProductApiResponseSchema = z.infer<typeof productApiResponseSchema>;
export type allProducts = z.infer<typeof productDetails>;

// --- Esquemas de validación para archivos ---

// Esquema básico para un solo archivo
const fileSchema = z.object({
  name: z.string().min(1, 'El nombre del archivo no puede estar vacío.'),
  size: z.number().int().positive('El tamaño del archivo debe ser positivo.'),
  type: z.string().refine(
    (type) => type.startsWith('image/'),
    'Solo se permiten archivos de imagen.'
  ),
  // Puedes añadir más validaciones personalizadas aquí
  // Por ejemplo, limitar el tamaño máximo a 5MB (5 * 1024 * 1024 bytes)
}).refine(
  (file) => file.size <= 5 * 1024 * 1024,
  'El tamaño del archivo no debe exceder los 5MB.'
);

// Esquema para un array de archivos (cuando el input es multiple)
const filesArraySchema = z.array(fileSchema).max(5, 'Solo se permiten hasta 5 archivos.');

// const formSchema = z.object({
//   file: z
//     .instanceof(FileList)
//     .refine((file) => file?.length == 1, 'File is required.')
// });

export const product = z.object({
  id: z.number().optional(),
  title: z.string(),
  description: z.string(),
  address: z.string(),
  // category: z.string(),
  stock: z.number(),
  price: z.string(),
  urlImg: z.any(),
  // urlImg: z.string(),
  status: z.string(),
  userId: z.number().optional()
})

export const productDetails = product.extend({
  fullname: z.string(),
  phone: z.string().nullable(),
  email: z.string().email().nullable()
})

export const editInventory = z.object({
  id: z.number().optional(),
  title: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }),
  description: z.string().min(10, { message: "Debe de tener 10 o más caracteres" }),
  stock: z.number(),
  address: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }),
  price: z.string(),
  urlImg: z.any(),
  status: z.string().min(1, { message: "Debe de seleccionar un valor" }),
  userId: z.number().optional(),
})

// export const productDetails = z.object({
//   id: z.number().optional(),
//   title: z.string().min(5),
//   description: z.string().min(10),
//   stock: z.number(),
//   price: z.string(),
//   address: z.string(),
//   urlImg: z.string(),
//   userId: z.number(),
// })

export const ApiResponseSchema = z.object({
  message: z.string(),
  data: z.array(product),
  meta: z.object({
    page: z.number(),
    limit: z.number(),
    totalCount: z.number(),
    totalPages: z.number(),
    hasNextPage: z.boolean(),
    hasPreviousPage: z.boolean(),
    nextPage: z.number().nullable(),
    previousPage: z.number().nullable(),
  }),
})

export const productApiResponseSchema = z.object({
  message: z.string(),
  data: z.array(productDetails),
  meta: z.object({
    page: z.number(),
    limit: z.number(),
    totalCount: z.number(),
    totalPages: z.number(),
    hasNextPage: z.boolean(),
    hasPreviousPage: z.boolean(),
    nextPage: z.number().nullable(),
    previousPage: z.number().nullable(),
  }),
})

export const test = z.object({
  // message: z.string(),
  data: z.array(z.string()),
})

export const productMutate = z.object({
  message: z.string(),
  data: product,
})

export const getProduct = z.object({
  message: z.string(),
  data: productDetails,
})