import vine from '@vinejs/vine'

export const createCategoryValidator = vine.compile(
  vine.object({
    name: vine.string().unique(async (db, value) => {
      const match = await db.from('categories').select('id').where('name', value).first()
      return !match
    }),
    nameHu: vine.string().optional(),
    nameEn: vine.string().optional(),
    slug: vine.string().unique(async (db, value) => {
      const match = await db.from('categories').select('id').where('slug', value).first()
      return !match
    }),
  })
)

export const updateCategoryValidator = vine.compile(
  vine.object({
    id: vine.number(),
    name: vine
      .string()
      .unique(async (db, value, field) => {
        const match = await db
          .from('categories')
          .select('id')
          .where('name', value)
          .whereNot('id', field.data.id)
          .first()
        return !match
      })
      .optional(),
    nameHu: vine.string().optional(),
    nameEn: vine.string().optional(),
    slug: vine
      .string()
      .unique(async (db, value, field) => {
        const match = await db
          .from('categories')
          .select('id')
          .where('slug', value)
          .whereNot('id', field.data.id)
          .first()
        return !match
      })
      .optional(),
  })
)
