import vine from '@vinejs/vine'
import { sanitizeIdOrEncryptedId } from '../Helper/Helper.js'

export const calculateRateValidator = vine.compile(
  vine.object({
    origin_city: vine.string().maxLength(100),
    origin_country: vine.string().maxLength(50),
    origin_postal_code: vine.string().maxLength(20).optional(),
    origin_lat: vine.string().optional(),
    origin_lng: vine.string().optional(),
    destination_city: vine.string().maxLength(100),
    destination_country: vine.string().maxLength(50),
    destination_postal_code: vine.string().maxLength(20).optional(),
    destination_lat: vine.string().optional(),
    destination_lng: vine.string().optional(),
    weight: vine.number().min(0.01).max(10000),
    number_of_pieces: vine.number().min(1).max(100),
    product_group: vine.string().maxLength(50).optional(),
    product_type: vine.string().maxLength(50).optional(),
    length: vine.number().min(0.1).max(1000).optional(),
    width: vine.number().min(0.1).max(1000).optional(),
    height: vine.number().min(0.1).max(1000).optional(),
    created_for_id: vine.any().transform(sanitizeIdOrEncryptedId).optional(),
  })
)

export const calculateRateByCarrierValidator = vine.compile(
  vine.object({
    carrier: vine.string().in(['Aramex', 'DHL', 'FedEx', 'SMSA']),
    origin_city: vine.string().maxLength(100),
    origin_country: vine.string().maxLength(50),
    origin_postal_code: vine.string().maxLength(20).optional(),
    origin_lat: vine.string().optional(),
    origin_lng: vine.string().optional(),
    destination_city: vine.string().maxLength(100),
    destination_country: vine.string().maxLength(50),
    destination_postal_code: vine.string().maxLength(20).optional(),
    destination_lat: vine.string().optional(),
    destination_lng: vine.string().optional(),
    weight: vine.number().min(0.01).max(10000),
    number_of_pieces: vine.number().min(1).max(100),
    product_group: vine.string().maxLength(50).optional(),
    product_type: vine.string().maxLength(50).optional(),
    length: vine.number().min(0.1).max(1000).optional(),
    width: vine.number().min(0.1).max(1000).optional(),
    height: vine.number().min(0.1).max(1000).optional(),
    created_for_id: vine.any().transform(sanitizeIdOrEncryptedId).optional(),
  })
)
