import { StandardizedStatusCodesSchema } from './standardized-status-codes-schema';
import { StandardizedStatusDetailCodesSchema } from './standardized-status-detail-codes-schema';
import { DimensionsSchema } from '../units/dimensions-schema';
import { ServiceSchema } from './service-schema';
import { TrackEventSchema } from './track-event-schema';
import Joi from 'joi';

export const TrackingInfoSchema = Joi.object({
  carrier_name: Joi.string().optional().empty(),
  tracking_number: Joi.string().optional().empty(),
  standardized_status_code: StandardizedStatusCodesSchema,
  standardized_status_detail_code: StandardizedStatusDetailCodesSchema,
  carrier_status_code: Joi.string().optional().empty(),
  carrier_detail_code: Joi.string().optional().empty(),
  carrier_status_description: Joi.string().optional().empty(),
  shipped_datetime: Joi.string().optional().empty().isoDate(),
  estimated_delivery_datetime: Joi.string().optional().empty(),
  actual_delivery_datetime: Joi.string().optional().empty().isoDate(),
  shipping_problem_description: Joi.string().optional().empty(),
  weight: Joi.number().optional().empty(),
  dimensions: DimensionsSchema.optional(),
  service: ServiceSchema.optional(),
  packaging: Joi.string().optional().empty(),
  package_count: Joi.number().optional().empty(),
  events: Joi.array().optional().items(TrackEventSchema),
  shipping_problem: Joi.boolean().optional().empty(),
  shipping_problem_code: Joi.string().optional().empty(),
  error_description: Joi.string().optional().empty(),
}).or('standardized_status_code', 'standardized_status_detail_code');
