import vine from '@vinejs/vine'
import { normalizeArray, setFirstSecondOfDay, setLastSecondOfDay } from '../Helper/Helper.js'

export const createCreditNoteByAdminValidator = vine.compile(
  vine.object({
    invoice_id: vine.number().min(1),
    amount: vine.number().min(0.01),
    notes: vine.string().maxLength(255).optional(),
  })
)

export const listCreditNotesByAdminValidator = vine.compile(
  vine.object({
    page: vine.number().min(1).optional(),
    limit: vine.number().min(1).max(1000).optional(),
    search: vine.string().maxLength(255).optional(),

    filter_by_customer_id: vine.any().transform(normalizeArray).optional(),
    filter_by_invoice_type: vine.any().transform(normalizeArray).optional(),
    filter_by_created_start_date: vine.date().transform(setFirstSecondOfDay).optional(),
    filter_by_created_end_date: vine.date().transform(setLastSecondOfDay).optional(),

    sort_by_created_at: vine.enum(['asc', 'desc']).optional(),
    sort_by_updated_at: vine.enum(['asc', 'desc']).optional(),
    sort_by_amount: vine.enum(['asc', 'desc']).optional(),
  })
)

export const sendSoaEmailByAdminValidator = vine.compile(
  vine.object({
    group_invoice_id: vine.any().transform(normalizeArray).optional(),
    credit_note_id: vine.any().transform(normalizeArray).optional(),
  })
)

export const editCreditNoteByAdminValidator = vine.compile(
  vine.object({
    credit_note_id: vine.number().min(1),
    amount: vine.number().min(0.01),
    notes: vine.string().maxLength(255).optional().nullable(),
  })
)
