text: const Joi = require("joi");
  
  class Validator {
    static Meta() {
      return Joi.object({
        source: Joi.string().allow(""),
      });
    }
  
    static Media() {
      return Joi.object({
        meta: this.Meta(),
  
        url: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ProductListingActionPage() {
      return Joi.object({
        params: Joi.any(),
  
        type: Joi.string().allow(""),
  
        query: Joi.any(),
      });
    }
  
    static ProductListingAction() {
      return Joi.object({
        page: this.ProductListingActionPage(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ProductBrand() {
      return Joi.object({
        logo: this.Media(),
  
        action: this.ProductListingAction(),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static Price() {
      return Joi.object({
        currency_symbol: Joi.string().allow(""),
  
        min: Joi.number(),
  
        max: Joi.number(),
  
        currency_code: Joi.string().allow(""),
      });
    }
  
    static ProductListingPrice() {
      return Joi.object({
        effective: this.Price(),
  
        marked: this.Price(),
      });
    }
  
    static ProductDetailAttribute() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductDetailGroupedAttribute() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        details: Joi.array().items(this.ProductDetailAttribute()),
      });
    }
  
    static ProductDetail() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
  
        type: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        color: Joi.string().allow(""),
  
        similars: Joi.array().items(Joi.string().allow("")),
  
        rating: Joi.number(),
  
        teaser_tag: Joi.string().allow(""),
  
        rating_count: Joi.number(),
  
        discount: Joi.string().allow(""),
  
        medias: Joi.array().items(this.Media()),
  
        item_type: Joi.string().allow(""),
  
        tryouts: Joi.array().items(Joi.string().allow("")),
  
        brand: this.ProductBrand(),
  
        short_description: Joi.string().allow(""),
  
        price: this.ProductListingPrice(),
  
        categories: Joi.array().items(this.ProductBrand()),
  
        item_code: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
  
        image_nature: Joi.string().allow(""),
  
        grouped_attributes: Joi.array().items(
          this.ProductDetailGroupedAttribute()
        ),
  
        highlights: Joi.array().items(Joi.string().allow("")),
  
        product_online_date: Joi.string().allow(""),
  
        attributes: Joi.any(),
  
        description: Joi.string().allow(""),
  
        has_variant: Joi.boolean(),
      });
    }
  
    static ErrorResponse() {
      return Joi.object({
        error: Joi.string().allow(""),
      });
    }
  
    static SizeChartValues() {
      return Joi.object({
        col_6: Joi.string().allow(""),
  
        col_4: Joi.string().allow(""),
  
        col_1: Joi.string().allow(""),
  
        col_2: Joi.string().allow(""),
  
        col_3: Joi.string().allow(""),
  
        col_5: Joi.string().allow(""),
      });
    }
  
    static ColumnHeader() {
      return Joi.object({
        convertable: Joi.boolean(),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ColumnHeaders() {
      return Joi.object({
        col_6: this.ColumnHeader(),
  
        col_4: this.ColumnHeader(),
  
        col_1: this.ColumnHeader(),
  
        col_2: this.ColumnHeader(),
  
        col_3: this.ColumnHeader(),
  
        col_5: this.ColumnHeader(),
      });
    }
  
    static SizeChart() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        size_tip: Joi.string().allow(""),
  
        unit: Joi.string().allow(""),
  
        sizes: Joi.array().items(this.SizeChartValues()),
  
        headers: this.ColumnHeaders(),
  
        image: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
      });
    }
  
    static ProductSize() {
      return Joi.object({
        is_available: Joi.boolean(),
  
        quantity: Joi.number(),
  
        display: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductSizeStores() {
      return Joi.object({
        count: Joi.number(),
      });
    }
  
    static ProductSizes() {
      return Joi.object({
        size_chart: this.SizeChart(),
  
        sizes: Joi.array().items(this.ProductSize()),
  
        discount: Joi.string().allow(""),
  
        price: this.ProductListingPrice(),
  
        sellable: Joi.boolean(),
  
        stores: this.ProductSizeStores(),
      });
    }
  
    static Details() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static MarketPlaceSttributes() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        details: Joi.array().items(this.Details()),
      });
    }
  
    static ArticleAssignment() {
      return Joi.object({
        level: Joi.string().allow(""),
  
        strategy: Joi.string().allow(""),
      });
    }
  
    static Seller() {
      return Joi.object({
        count: Joi.number(),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static Store() {
      return Joi.object({
        count: Joi.number(),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static ProductSetDistributionSize() {
      return Joi.object({
        pieces: Joi.number(),
  
        size: Joi.string().allow(""),
      });
    }
  
    static ProductSetDistribution() {
      return Joi.object({
        sizes: Joi.array().items(this.ProductSetDistributionSize()),
      });
    }
  
    static ProductSet() {
      return Joi.object({
        size_distribution: this.ProductSetDistribution(),
  
        quantity: Joi.number(),
      });
    }
  
    static StrategyWiseListing() {
      return Joi.object({
        quantity: Joi.number(),
  
        tat: Joi.number(),
  
        distance: Joi.number(),
  
        pincode: Joi.number(),
      });
    }
  
    static ProductStockPrice() {
      return Joi.object({
        effective: Joi.number(),
  
        marked: Joi.number(),
  
        currency: Joi.string().allow(""),
      });
    }
  
    static ReturnConfig() {
      return Joi.object({
        returnable: Joi.boolean(),
  
        unit: Joi.string().allow(""),
  
        time: Joi.number(),
      });
    }
  
    static ProductSizePriceResponse() {
      return Joi.object({
        article_id: Joi.string().allow(""),
  
        marketplace_attributes: Joi.array().items(this.MarketPlaceSttributes()),
  
        special_badge: Joi.string().allow(""),
  
        article_assignment: this.ArticleAssignment(),
  
        seller: this.Seller(),
  
        store: this.Store(),
  
        seller_count: Joi.number(),
  
        discount: Joi.string().allow(""),
  
        long_lat: Joi.array().items(Joi.number()),
  
        set: this.ProductSet(),
  
        quantity: Joi.number(),
  
        strategy_wise_listing: Joi.array().items(this.StrategyWiseListing()),
  
        price: this.ProductStockPrice(),
  
        return_config: this.ReturnConfig(),
  
        pincode: Joi.number(),
  
        price_per_piece: this.ProductStockPrice(),
  
        item_type: Joi.string().allow(""),
      });
    }
  
    static ProductSizeSellerFilter() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        is_selected: Joi.boolean(),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductSizeSellersResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        sort_on: Joi.array().items(this.ProductSizeSellerFilter()),
  
        items: Joi.array().items(this.ProductSizePriceResponse()),
      });
    }
  
    static AttributeDetail() {
      return Joi.object({
        logo: Joi.string().allow(""),
  
        key: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        display: Joi.string().allow(""),
      });
    }
  
    static AttributeMetadata() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        details: Joi.array().items(this.AttributeDetail()),
      });
    }
  
    static ProductsComparisonResponse() {
      return Joi.object({
        attributes_metadata: Joi.array().items(this.AttributeMetadata()),
  
        items: Joi.array().items(this.ProductDetail()),
      });
    }
  
    static ProductCompareResponse() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        attributes_metadata: Joi.array().items(this.AttributeMetadata()),
  
        items: Joi.array().items(this.ProductDetail()),
  
        subtitle: Joi.string().allow(""),
      });
    }
  
    static ProductFrequentlyComparedSimilarResponse() {
      return Joi.object({
        similars: this.ProductCompareResponse(),
      });
    }
  
    static ProductSimilarItem() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        items: Joi.array().items(this.ProductDetail()),
  
        subtitle: Joi.string().allow(""),
      });
    }
  
    static SimilarProductByTypeResponse() {
      return Joi.object({
        similars: this.ProductSimilarItem(),
      });
    }
  
    static ProductVariantItemResponse() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        action: this.ProductListingAction(),
  
        color_name: Joi.string().allow(""),
  
        color: Joi.string().allow(""),
  
        is_available: Joi.boolean(),
  
        medias: Joi.array().items(this.Media()),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductVariantResponse() {
      return Joi.object({
        header: Joi.string().allow(""),
  
        key: Joi.string().allow(""),
  
        display_type: Joi.string().allow(""),
  
        items: Joi.array().items(this.ProductVariantItemResponse()),
      });
    }
  
    static ProductVariantsResponse() {
      return Joi.object({
        variants: Joi.array().items(this.ProductVariantResponse()),
      });
    }
  
    static CompanyDetail() {
      return Joi.object({
        id: Joi.number(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static StoreDetail() {
      return Joi.object({
        id: Joi.number(),
  
        name: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
      });
    }
  
    static ProductStockStatusItem() {
      return Joi.object({
        item_id: Joi.number(),
  
        company: this.CompanyDetail(),
  
        uid: Joi.string().allow(""),
  
        identifier: Joi.any(),
  
        seller: this.Seller(),
  
        store: this.StoreDetail(),
  
        quantity: Joi.number(),
  
        price: this.ProductStockPrice(),
  
        size: Joi.string().allow(""),
      });
    }
  
    static ProductStockStatusResponse() {
      return Joi.object({
        items: Joi.array().items(this.ProductStockStatusItem()),
      });
    }
  
    static ProductStockPolling() {
      return Joi.object({
        page: this.Page().required(),
  
        items: Joi.array().items(this.ProductStockStatusItem()),
      });
    }
  
    static ProductFiltersKey() {
      return Joi.object({
        logo: Joi.string().allow(""),
  
        name: Joi.string().allow("").required(),
  
        kind: Joi.string().allow(""),
  
        display: Joi.string().allow("").required(),
      });
    }
  
    static ProductFiltersValue() {
      return Joi.object({
        selected_max: Joi.number(),
  
        min: Joi.number(),
  
        is_selected: Joi.boolean().required(),
  
        selected_min: Joi.number(),
  
        currency_symbol: Joi.string().allow(""),
  
        display_format: Joi.string().allow(""),
  
        currency_code: Joi.string().allow(""),
  
        display: Joi.string().allow("").required(),
  
        query_format: Joi.string().allow(""),
  
        count: Joi.number(),
  
        max: Joi.number(),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductFilters() {
      return Joi.object({
        key: this.ProductFiltersKey().required(),
  
        values: Joi.array().items(this.ProductFiltersValue()).required(),
      });
    }
  
    static ProductListingDetail() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
  
        type: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        color: Joi.string().allow(""),
  
        sellable: Joi.boolean(),
  
        similars: Joi.array().items(Joi.string().allow("")),
  
        rating: Joi.number(),
  
        teaser_tag: Joi.string().allow(""),
  
        rating_count: Joi.number(),
  
        discount: Joi.string().allow(""),
  
        medias: Joi.array().items(this.Media()),
  
        item_type: Joi.string().allow(""),
  
        tryouts: Joi.array().items(Joi.string().allow("")),
  
        brand: this.ProductBrand(),
  
        short_description: Joi.string().allow(""),
  
        price: this.ProductListingPrice(),
  
        categories: Joi.array().items(this.ProductBrand()),
  
        item_code: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
  
        image_nature: Joi.string().allow(""),
  
        grouped_attributes: Joi.array().items(
          this.ProductDetailGroupedAttribute()
        ),
  
        highlights: Joi.array().items(Joi.string().allow("")),
  
        product_online_date: Joi.string().allow(""),
  
        attributes: Joi.any(),
  
        description: Joi.string().allow(""),
  
        has_variant: Joi.boolean(),
      });
    }
  
    static ProductSortOn() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        is_selected: Joi.boolean(),
  
        value: Joi.string().allow(""),
      });
    }
  
    static ProductListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        filters: Joi.array().items(this.ProductFilters()),
  
        items: Joi.array().items(this.ProductListingDetail()),
  
        sort_on: Joi.array().items(this.ProductSortOn()),
      });
    }
  
    static ImageUrls() {
      return Joi.object({
        portrait: this.Media(),
  
        landscape: this.Media(),
      });
    }
  
    static BrandItem() {
      return Joi.object({
        logo: this.Media(),
  
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
  
        uid: Joi.number(),
  
        departments: Joi.array().items(Joi.string().allow("")),
  
        banners: this.ImageUrls(),
  
        discount: Joi.string().allow(""),
      });
    }
  
    static BrandListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        items: Joi.array().items(this.BrandItem()),
      });
    }
  
    static BrandDetailResponse() {
      return Joi.object({
        logo: this.Media(),
  
        banners: this.ImageUrls(),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static ThirdLevelChild() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        action: this.ProductListingAction(),
  
        childs: Joi.array().items(Joi.any()),
  
        banners: this.ImageUrls(),
  
        _custom_json: Joi.any(),
      });
    }
  
    static SecondLevelChild() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        action: this.ProductListingAction(),
  
        childs: Joi.array().items(this.ThirdLevelChild()),
  
        banners: this.ImageUrls(),
  
        _custom_json: Joi.any(),
      });
    }
  
    static Child() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        action: this.ProductListingAction(),
  
        childs: Joi.array().items(this.SecondLevelChild()),
  
        banners: this.ImageUrls(),
  
        _custom_json: Joi.any(),
      });
    }
  
    static CategoryItems() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
  
        uid: Joi.number(),
  
        childs: Joi.array().items(this.Child()),
  
        banners: this.ImageUrls(),
      });
    }
  
    static DepartmentCategoryTree() {
      return Joi.object({
        department: Joi.string().allow(""),
  
        items: Joi.array().items(this.CategoryItems()),
      });
    }
  
    static DepartmentIdentifier() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static CategoryListingResponse() {
      return Joi.object({
        data: Joi.array().items(this.DepartmentCategoryTree()),
  
        departments: Joi.array().items(this.DepartmentIdentifier()),
      });
    }
  
    static CategoryMetaResponse() {
      return Joi.object({
        logo: this.Media(),
  
        banners: this.ImageUrls(),
  
        name: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static HomeListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        message: Joi.string().allow(""),
  
        items: Joi.array().items(this.ProductListingDetail()),
      });
    }
  
    static Department() {
      return Joi.object({
        logo: this.Media(),
  
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        priority_order: Joi.number(),
  
        uid: Joi.number(),
      });
    }
  
    static DepartmentResponse() {
      return Joi.object({
        items: Joi.array().items(this.Department()),
      });
    }
  
    static AutocompleteItem() {
      return Joi.object({
        logo: this.Media(),
  
        display: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
      });
    }
  
    static AutoCompleteResponse() {
      return Joi.object({
        items: Joi.array().items(this.AutocompleteItem()),
      });
    }
  
    static CollectionListingFilterTag() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        is_selected: Joi.boolean(),
  
        display: Joi.string().allow(""),
      });
    }
  
    static CollectionListingFilterType() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        is_selected: Joi.boolean(),
  
        display: Joi.string().allow(""),
      });
    }
  
    static CollectionListingFilter() {
      return Joi.object({
        tags: Joi.array().items(this.CollectionListingFilterTag()),
  
        type: Joi.array().items(this.CollectionListingFilterType()),
      });
    }
  
    static GetCollectionDetailNest() {
      return Joi.object({
        logo: this.Media(),
  
        description: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        app_id: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
  
        banners: this.ImageUrls(),
  
        allow_facets: Joi.boolean(),
  
        cron: Joi.any(),
  
        _schedule: Joi.any(),
  
        badge: Joi.any(),
  
        allow_sort: Joi.boolean(),
  
        visible_facets_keys: Joi.array().items(Joi.string().allow("")),
  
        is_active: Joi.boolean(),
  
        name: Joi.string().allow(""),
  
        action: this.ProductListingAction(),
  
        query: Joi.any(),
  
        meta: Joi.any(),
  
        tag: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static GetCollectionListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        filters: this.CollectionListingFilter(),
  
        items: Joi.array().items(this.GetCollectionDetailNest()),
      });
    }
  
    static CollectionDetailResponse() {
      return Joi.object({
        logo: this.Media(),
  
        tag: Joi.array().items(Joi.string().allow("")),
  
        is_active: Joi.boolean(),
  
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        cron: Joi.any(),
  
        type: Joi.string().allow(""),
  
        app_id: Joi.string().allow(""),
  
        allow_sort: Joi.boolean(),
  
        visible_facets_keys: Joi.array().items(Joi.string().allow("")),
  
        banners: this.ImageUrls(),
  
        _schedule: Joi.any(),
  
        query: Joi.any(),
  
        badge: Joi.any(),
  
        meta: Joi.any(),
  
        allow_facets: Joi.boolean(),
  
        description: Joi.string().allow(""),
      });
    }
  
    static GetFollowListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        items: Joi.array().items(this.ProductListingDetail()).required(),
      });
    }
  
    static FollowPostResponse() {
      return Joi.object({
        id: Joi.string().allow("").required(),
  
        message: Joi.string().allow("").required(),
      });
    }
  
    static FollowerCountResponse() {
      return Joi.object({
        count: Joi.number(),
      });
    }
  
    static FollowIdsData() {
      return Joi.object({
        brands: Joi.array().items(Joi.number()),
  
        collections: Joi.array().items(Joi.number()),
  
        products: Joi.array().items(Joi.number()),
      });
    }
  
    static FollowIdsResponse() {
      return Joi.object({
        data: this.FollowIdsData(),
      });
    }
  
    static LatLong() {
      return Joi.object({
        coordinates: Joi.array().items(Joi.number()),
  
        type: Joi.string().allow(""),
      });
    }
  
    static Store1() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        store_code: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        country: Joi.string().allow(""),
  
        store_email: Joi.string().allow(""),
  
        lat_long: this.LatLong(),
  
        state: Joi.string().allow(""),
  
        pincode: Joi.number(),
  
        address: Joi.string().allow(""),
      });
    }
  
    static StoreListingResponse() {
      return Joi.object({
        page: this.Page().required(),
  
        items: Joi.array().items(this.Store1()).required(),
      });
    }
  
    static StoreDepartments() {
      return Joi.object({
        logo: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        priority_order: Joi.number(),
  
        uid: Joi.number(),
      });
    }
  
    static CompanyStore() {
      return Joi.object({
        business_type: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        company_type: Joi.string().allow(""),
  
        uid: Joi.number(),
      });
    }
  
    static SellerPhoneNumber() {
      return Joi.object({
        number: Joi.string().allow("").required(),
  
        country_code: Joi.number().required(),
      });
    }
  
    static StoreManagerSerializer() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        mobile_no: this.SellerPhoneNumber(),
      });
    }
  
    static StoreAddressSerializer() {
      return Joi.object({
        latitude: Joi.number(),
  
        city: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        longitude: Joi.number(),
  
        state: Joi.string().allow(""),
  
        landmark: Joi.string().allow(""),
  
        pincode: Joi.number(),
  
        address1: Joi.string().allow(""),
  
        address2: Joi.string().allow(""),
      });
    }
  
    static AppStore() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        company: this.CompanyStore(),
  
        uid: Joi.number(),
  
        departments: Joi.array().items(this.StoreDepartments()),
  
        contact_numbers: Joi.array().items(this.SellerPhoneNumber()),
  
        manager: this.StoreManagerSerializer(),
  
        address: this.StoreAddressSerializer(),
      });
    }
  
    static ApplicationStoreListing() {
      return Joi.object({
        page: this.Page(),
  
        filters: Joi.array().items(this.StoreDepartments()),
  
        items: Joi.array().items(this.AppStore()),
      });
    }
  
    static Time() {
      return Joi.object({
        hour: Joi.number(),
  
        minute: Joi.number(),
      });
    }
  
    static StoreTiming() {
      return Joi.object({
        closing: this.Time(),
  
        weekday: Joi.string().allow(""),
  
        open: Joi.boolean(),
  
        opening: this.Time(),
      });
    }
  
    static StoreDetails() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        company: this.CompanyStore(),
  
        uid: Joi.number(),
  
        departments: Joi.array().items(this.StoreDepartments()),
  
        contact_numbers: Joi.array().items(this.SellerPhoneNumber()),
  
        timing: Joi.array().items(this.StoreTiming()),
  
        _custom_json: Joi.any(),
  
        manager: this.StoreManagerSerializer(),
  
        address: this.StoreAddressSerializer(),
      });
    }
  
    static PromiseFormatted() {
      return Joi.object({
        max: Joi.string().allow(""),
  
        min: Joi.string().allow(""),
      });
    }
  
    static PromiseTimestamp() {
      return Joi.object({
        max: Joi.number(),
  
        min: Joi.number(),
      });
    }
  
    static ShipmentPromise() {
      return Joi.object({
        formatted: this.PromiseFormatted(),
  
        timestamp: this.PromiseTimestamp(),
      });
    }
  
    static CartCurrency() {
      return Joi.object({
        symbol: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
      });
    }
  
    static LoyaltyPoints() {
      return Joi.object({
        total: Joi.number(),
  
        description: Joi.string().allow(""),
  
        is_applied: Joi.boolean(),
  
        applicable: Joi.number(),
      });
    }
  
    static DisplayBreakup() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        key: Joi.string().allow(""),
  
        currency_code: Joi.string().allow(""),
  
        currency_symbol: Joi.string().allow(""),
  
        value: Joi.number(),
  
        message: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static CouponBreakup() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
  
        value: Joi.number(),
  
        code: Joi.string().allow(""),
  
        is_applied: Joi.boolean(),
      });
    }
  
    static RawBreakup() {
      return Joi.object({
        mrp_total: Joi.number(),
  
        vog: Joi.number(),
  
        cod_charge: Joi.number(),
  
        fynd_cash: Joi.number(),
  
        coupon: Joi.number(),
  
        subtotal: Joi.number(),
  
        discount: Joi.number(),
  
        delivery_charge: Joi.number(),
  
        gst_charges: Joi.number(),
  
        total: Joi.number(),
  
        convenience_fee: Joi.number(),
  
        you_saved: Joi.number(),
      });
    }
  
    static CartBreakup() {
      return Joi.object({
        loyalty_points: this.LoyaltyPoints(),
  
        display: Joi.array().items(this.DisplayBreakup()),
  
        coupon: this.CouponBreakup(),
  
        raw: this.RawBreakup(),
      });
    }
  
    static PaymentSelectionLock() {
      return Joi.object({
        enabled: Joi.boolean(),
  
        default_options: Joi.string().allow(""),
  
        payment_identifier: Joi.string().allow(""),
      });
    }
  
    static ProductPrice() {
      return Joi.object({
        selling: Joi.number(),
  
        add_on: Joi.number(),
  
        effective: Joi.number(),
  
        currency_code: Joi.string().allow(""),
  
        currency_symbol: Joi.string().allow(""),
  
        marked: Joi.number(),
      });
    }
  
    static ProductPriceInfo() {
      return Joi.object({
        base: this.ProductPrice(),
  
        converted: this.ProductPrice(),
      });
    }
  
    static PromoMeta() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static ProductAvailability() {
      return Joi.object({
        sizes: Joi.array().items(Joi.string().allow("")),
  
        other_store_quantity: Joi.number(),
  
        deliverable: Joi.boolean(),
  
        is_valid: Joi.boolean(),
  
        out_of_stock: Joi.boolean(),
      });
    }
  
    static ProductImage() {
      return Joi.object({
        secure_url: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
  
        aspect_ratio: Joi.string().allow(""),
      });
    }
  
    static ActionQuery() {
      return Joi.object({
        product_slug: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static ProductAction() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        query: this.ActionQuery(),
  
        url: Joi.string().allow(""),
      });
    }
  
    static CategoryInfo() {
      return Joi.object({
        uid: Joi.number(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static BaseInfo() {
      return Joi.object({
        uid: Joi.number(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static CartProduct() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        images: Joi.array().items(this.ProductImage()),
  
        action: this.ProductAction(),
  
        slug: Joi.string().allow(""),
  
        categories: Joi.array().items(this.CategoryInfo()),
  
        uid: Joi.number(),
  
        brand: this.BaseInfo(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static BasePrice() {
      return Joi.object({
        marked: Joi.number(),
  
        effective: Joi.number(),
  
        currency_symbol: Joi.string().allow(""),
  
        currency_code: Joi.string().allow(""),
      });
    }
  
    static ArticlePriceInfo() {
      return Joi.object({
        base: this.BasePrice(),
  
        converted: this.BasePrice(),
      });
    }
  
    static ProductArticle() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        size: Joi.string().allow(""),
  
        seller: this.BaseInfo(),
  
        price: this.ArticlePriceInfo(),
  
        quantity: Joi.number(),
  
        uid: Joi.string().allow(""),
  
        extra_meta: Joi.any(),
  
        store: this.BaseInfo(),
      });
    }
  
    static CartProductIdentifer() {
      return Joi.object({
        identifier: Joi.string().allow(""),
      });
    }
  
    static CartProductInfo() {
      return Joi.object({
        price: this.ProductPriceInfo(),
  
        promo_meta: this.PromoMeta(),
  
        availability: this.ProductAvailability(),
  
        product: this.CartProduct(),
  
        article: this.ProductArticle(),
  
        quantity: Joi.number(),
  
        coupon_message: Joi.string().allow(""),
  
        key: Joi.string().allow(""),
  
        discount: Joi.string().allow(""),
  
        price_per_unit: this.ProductPriceInfo(),
  
        identifiers: this.CartProductIdentifer().required(),
  
        bulk_offer: Joi.any(),
  
        message: Joi.string().allow(""),
  
        is_set: Joi.boolean(),
      });
    }
  
    static CartDetailResponse() {
      return Joi.object({
        delivery_promise: this.ShipmentPromise(),
  
        coupon_text: Joi.string().allow(""),
  
        comment: Joi.string().allow(""),
  
        currency: this.CartCurrency(),
  
        checkout_mode: Joi.string().allow(""),
  
        breakup_values: this.CartBreakup(),
  
        last_modified: Joi.string().allow(""),
  
        restrict_checkout: Joi.boolean(),
  
        gstin: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        payment_selection_lock: this.PaymentSelectionLock(),
  
        items: Joi.array().items(this.CartProductInfo()),
  
        delivery_charge_info: Joi.string().allow(""),
  
        is_valid: Joi.boolean(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static AddProductCart() {
      return Joi.object({
        article_id: Joi.string().allow(""),
  
        item_id: Joi.number(),
  
        article_assignment: Joi.any(),
  
        display: Joi.string().allow(""),
  
        pos: Joi.boolean(),
  
        quantity: Joi.number(),
  
        item_size: Joi.string().allow(""),
  
        store_id: Joi.number(),
  
        extra_meta: Joi.any(),
  
        seller_id: Joi.number(),
      });
    }
  
    static AddCartRequest() {
      return Joi.object({
        items: Joi.array().items(this.AddProductCart()),
      });
    }
  
    static AddCartDetailResponse() {
      return Joi.object({
        cart: this.CartDetailResponse(),
  
        partial: Joi.boolean(),
  
        message: Joi.string().allow(""),
  
        success: Joi.boolean(),
      });
    }
  
    static UpdateProductCart() {
      return Joi.object({
        article_id: Joi.string().allow(""),
  
        item_id: Joi.number(),
  
        quantity: Joi.number(),
  
        item_index: Joi.number(),
  
        item_size: Joi.string().allow(""),
  
        extra_meta: Joi.any(),
  
        identifiers: this.CartProductIdentifer().required(),
      });
    }
  
    static UpdateCartRequest() {
      return Joi.object({
        operation: Joi.string().allow("").required(),
  
        items: Joi.array().items(this.UpdateProductCart()),
      });
    }
  
    static UpdateCartDetailResponse() {
      return Joi.object({
        cart: this.CartDetailResponse(),
  
        message: Joi.string().allow(""),
  
        success: Joi.boolean(),
      });
    }
  
    static CartItemCountResponse() {
      return Joi.object({
        user_cart_items_count: Joi.number(),
      });
    }
  
    static PageCoupon() {
      return Joi.object({
        has_previous: Joi.boolean(),
  
        total_item_count: Joi.number(),
  
        total: Joi.number(),
  
        has_next: Joi.boolean(),
  
        current: Joi.number(),
      });
    }
  
    static Coupon() {
      return Joi.object({
        sub_title: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
  
        expires_on: Joi.string().allow(""),
  
        max_discount_value: Joi.number(),
  
        is_applicable: Joi.boolean(),
  
        message: Joi.string().allow(""),
  
        minimum_cart_value: Joi.number(),
  
        is_applied: Joi.boolean(),
  
        coupon_value: Joi.number(),
  
        coupon_code: Joi.string().allow(""),
      });
    }
  
    static GetCouponResponse() {
      return Joi.object({
        page: this.PageCoupon(),
  
        available_coupon_list: Joi.array().items(this.Coupon()),
      });
    }
  
    static ApplyCouponRequest() {
      return Joi.object({
        coupon_code: Joi.string().allow("").required(),
      });
    }
  
    static OfferPrice() {
      return Joi.object({
        currency_code: Joi.string().allow(""),
  
        effective: Joi.number(),
  
        currency_symbol: Joi.string().allow(""),
  
        marked: Joi.number(),
  
        bulk_effective: Joi.number(),
      });
    }
  
    static OfferItem() {
      return Joi.object({
        price: this.OfferPrice(),
  
        type: Joi.string().allow(""),
  
        margin: Joi.number(),
  
        best: Joi.boolean(),
  
        quantity: Joi.number(),
  
        total: Joi.number(),
  
        auto_applied: Joi.boolean(),
      });
    }
  
    static OfferSeller() {
      return Joi.object({
        uid: Joi.number(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static BulkPriceOffer() {
      return Joi.object({
        offers: Joi.array().items(this.OfferItem()),
  
        seller: this.OfferSeller(),
      });
    }
  
    static BulkPriceResponse() {
      return Joi.object({
        data: Joi.array().items(this.BulkPriceOffer()),
      });
    }
  
    static RewardPointRequest() {
      return Joi.object({
        points: Joi.boolean().required(),
      });
    }
  
    static GeoLocation() {
      return Joi.object({
        longitude: Joi.number(),
  
        latitude: Joi.number(),
      });
    }
  
    static Address() {
      return Joi.object({
        country_code: Joi.string().allow(""),
  
        geo_location: this.GeoLocation(),
  
        google_map_point: Joi.any(),
  
        phone: Joi.string().allow(""),
  
        area_code_slug: Joi.string().allow(""),
  
        area: Joi.string().allow(""),
  
        address: Joi.string().allow(""),
  
        checkout_mode: Joi.string().allow(""),
  
        is_active: Joi.boolean(),
  
        state: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        area_code: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
  
        landmark: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        is_default_address: Joi.boolean(),
  
        address_type: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
      });
    }
  
    static GetAddressesResponse() {
      return Joi.object({
        address: Joi.array().items(this.Address()),
      });
    }
  
    static SaveAddressResponse() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        is_default_address: Joi.boolean(),
  
        success: Joi.boolean(),
      });
    }
  
    static UpdateAddressResponse() {
      return Joi.object({
        is_updated: Joi.boolean(),
  
        id: Joi.string().allow(""),
  
        is_default_address: Joi.boolean(),
  
        success: Joi.boolean(),
      });
    }
  
    static DeleteAddressResponse() {
      return Joi.object({
        is_deleted: Joi.boolean(),
  
        id: Joi.string().allow(""),
      });
    }
  
    static SelectCartAddressRequest() {
      return Joi.object({
        cart_id: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        billing_address_id: Joi.string().allow(""),
      });
    }
  
    static UpdateCartPaymentRequest() {
      return Joi.object({
        merchant_code: Joi.string().allow(""),
  
        aggregator_name: Joi.string().allow(""),
  
        payment_mode: Joi.string().allow(""),
  
        address_id: Joi.string().allow(""),
  
        payment_identifier: Joi.string().allow("").allow(null),
  
        id: Joi.string().allow(""),
      });
    }
  
    static CouponValidity() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        display_message_en: Joi.string().allow("").allow(null),
  
        discount: Joi.number(),
  
        code: Joi.string().allow("").allow(null),
  
        valid: Joi.boolean(),
      });
    }
  
    static PaymentCouponValidate() {
      return Joi.object({
        coupon_validity: this.CouponValidity(),
  
        message: Joi.string().allow(""),
  
        success: Joi.boolean().required(),
      });
    }
  
    static ShipmentResponse() {
      return Joi.object({
        dp_options: Joi.any().allow(null),
  
        order_type: Joi.string().allow(""),
  
        fulfillment_id: Joi.number(),
  
        shipments: Joi.number(),
  
        shipment_type: Joi.string().allow(""),
  
        box_type: Joi.string().allow("").allow(null),
  
        promise: this.ShipmentPromise(),
  
        fulfillment_type: Joi.string().allow(""),
  
        dp_id: Joi.string().allow("").allow(null),
  
        items: Joi.array().items(this.CartProductInfo()),
      });
    }
  
    static CartShipmentsResponse() {
      return Joi.object({
        restrict_checkout: Joi.boolean(),
  
        delivery_charge_info: Joi.string().allow(""),
  
        coupon_text: Joi.string().allow(""),
  
        checkout_mode: Joi.string().allow(""),
  
        shipments: Joi.array().items(this.ShipmentResponse()),
  
        cart_id: Joi.number(),
  
        id: Joi.string().allow(""),
  
        gstin: Joi.string().allow(""),
  
        payment_selection_lock: this.PaymentSelectionLock(),
  
        is_valid: Joi.boolean(),
  
        delivery_promise: this.ShipmentPromise(),
  
        comment: Joi.string().allow(""),
  
        currency: this.CartCurrency(),
  
        breakup_values: this.CartBreakup(),
  
        last_modified: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
  
        error: Joi.boolean(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static StaffCheckout() {
      return Joi.object({
        _id: Joi.string().allow("").required(),
  
        last_name: Joi.string().allow("").required(),
  
        user: Joi.string().allow("").required(),
  
        first_name: Joi.string().allow("").required(),
      });
    }
  
    static CartCheckoutDetailRequest() {
      return Joi.object({
        billing_address: Joi.any(),
  
        payment_params: Joi.any().allow(null),
  
        callback_url: Joi.string().allow("").allow(null),
  
        delivery_address: Joi.any(),
  
        merchant_code: Joi.string().allow(""),
  
        staff: this.StaffCheckout(),
  
        address_id: Joi.string().allow(""),
  
        payment_mode: Joi.string().allow("").required(),
  
        payment_identifier: Joi.string().allow("").allow(null),
  
        meta: Joi.any(),
  
        billing_address_id: Joi.string().allow(""),
  
        fyndstore_emp_id: Joi.string().allow(""),
  
        payment_auto_confirm: Joi.boolean(),
  
        ordering_store: Joi.number().allow(null),
  
        extra_meta: Joi.any(),
  
        aggregator: Joi.string().allow(""),
      });
    }
  
    static CheckCart() {
      return Joi.object({
        error_message: Joi.string().allow(""),
  
        delivery_charges: Joi.number(),
  
        restrict_checkout: Joi.boolean(),
  
        items: Joi.array().items(this.CartProductInfo()),
  
        delivery_charge_info: Joi.string().allow(""),
  
        delivery_charge_order_value: Joi.number(),
  
        coupon_text: Joi.string().allow(""),
  
        cod_message: Joi.string().allow(""),
  
        checkout_mode: Joi.string().allow(""),
  
        store_code: Joi.string().allow(""),
  
        success: Joi.boolean(),
  
        user_type: Joi.string().allow(""),
  
        cart_id: Joi.number(),
  
        id: Joi.string().allow(""),
  
        gstin: Joi.string().allow(""),
  
        payment_selection_lock: this.PaymentSelectionLock(),
  
        cod_available: Joi.boolean(),
  
        is_valid: Joi.boolean(),
  
        store_emps: Joi.array().items(Joi.any()),
  
        delivery_promise: this.ShipmentPromise(),
  
        order_id: Joi.string().allow(""),
  
        comment: Joi.string().allow(""),
  
        currency: this.CartCurrency(),
  
        breakup_values: this.CartBreakup(),
  
        last_modified: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
  
        cod_charges: Joi.number(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static CartCheckoutResponse() {
      return Joi.object({
        data: Joi.any(),
  
        app_intercept_url: Joi.string().allow(""),
  
        callback_url: Joi.string().allow(""),
  
        order_id: Joi.string().allow(""),
  
        cart: this.CheckCart(),
  
        success: Joi.boolean(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static CartMetaRequest() {
      return Joi.object({
        pick_up_customer_details: Joi.any(),
  
        checkout_mode: Joi.string().allow(""),
  
        gstin: Joi.string().allow(""),
  
        comment: Joi.string().allow(""),
      });
    }
  
    static CartMetaResponse() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static CartMetaMissingResponse() {
      return Joi.object({
        errors: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static GetShareCartLinkRequest() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        meta: Joi.any(),
      });
    }
  
    static GetShareCartLinkResponse() {
      return Joi.object({
        token: Joi.string().allow(""),
  
        share_url: Joi.string().allow(""),
      });
    }
  
    static SharedCartDetails() {
      return Joi.object({
        source: Joi.any(),
  
        user: Joi.any(),
  
        created_on: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        token: Joi.string().allow(""),
      });
    }
  
    static SharedCart() {
      return Joi.object({
        delivery_promise: this.ShipmentPromise(),
  
        shared_cart_details: this.SharedCartDetails(),
  
        coupon_text: Joi.string().allow(""),
  
        comment: Joi.string().allow(""),
  
        currency: this.CartCurrency(),
  
        checkout_mode: Joi.string().allow(""),
  
        breakup_values: this.CartBreakup(),
  
        last_modified: Joi.string().allow(""),
  
        restrict_checkout: Joi.boolean(),
  
        cart_id: Joi.number(),
  
        uid: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        items: Joi.array().items(this.CartProductInfo()),
  
        delivery_charge_info: Joi.string().allow(""),
  
        gstin: Joi.string().allow(""),
  
        payment_selection_lock: this.PaymentSelectionLock(),
  
        is_valid: Joi.boolean(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static SharedCartResponse() {
      return Joi.object({
        cart: this.SharedCart(),
  
        error: Joi.string().allow(""),
      });
    }
  
    static LocationDefaultLanguage() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
      });
    }
  
    static LocationDefaultCurrency() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        symbol: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
      });
    }
  
    static LocationCountry() {
      return Joi.object({
        capital: Joi.string().allow(""),
  
        currency: Joi.string().allow(""),
  
        iso2: Joi.string().allow(""),
  
        iso3: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        parent: Joi.string().allow(""),
  
        phone_code: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        __v: Joi.number(),
  
        _id: Joi.string().allow(""),
  
        default_currency: this.LocationDefaultCurrency(),
  
        default_language: this.LocationDefaultLanguage(),
      });
    }
  
    static Locations() {
      return Joi.object({
        items: Joi.array().items(Joi.any()),
      });
    }
  
    static TicketList() {
      return Joi.object({
        items: Joi.array().items(this.Ticket()),
  
        filters: this.Filter(),
  
        page: this.Page(),
      });
    }
  
    static Page() {
      return Joi.object({
        item_total: Joi.number(),
  
        next_id: Joi.string().allow(""),
  
        has_previous: Joi.boolean(),
  
        has_next: Joi.boolean(),
  
        current: Joi.number(),
  
        type: Joi.string().allow("").required(),
  
        size: Joi.number(),
      });
    }
  
    static TicketHistoryList() {
      return Joi.object({
        items: Joi.array().items(this.TicketHistory()),
  
        page: this.Page(),
      });
    }
  
    static CustomFormList() {
      return Joi.object({
        items: Joi.array().items(this.CustomForm()),
  
        page: this.Page(),
      });
    }
  
    static CreateCustomFormPayload() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
  
        title: Joi.string().allow("").required(),
  
        inputs: Joi.array().items(Joi.any()).required(),
  
        description: Joi.string().allow(""),
  
        header_image: Joi.string().allow(""),
  
        priority: this.PriorityEnum().required(),
  
        should_notify: Joi.boolean(),
  
        success_message: Joi.string().allow(""),
  
        poll_for_assignment: this.PollForAssignment(),
      });
    }
  
    static EditCustomFormPayload() {
      return Joi.object({
        title: Joi.string().allow("").required(),
  
        inputs: Joi.array().items(Joi.any()).required(),
  
        description: Joi.string().allow(""),
  
        priority: this.PriorityEnum().required(),
  
        header_image: Joi.string().allow(""),
  
        should_notify: Joi.boolean(),
  
        login_required: Joi.boolean(),
  
        success_message: Joi.string().allow(""),
  
        poll_for_assignment: this.PollForAssignment(),
      });
    }
  
    static EditTicketPayload() {
      return Joi.object({
        content: this.TicketContent(),
  
        category: Joi.string().allow(""),
  
        sub_category: Joi.string().allow(""),
  
        source: Joi.string().allow(""),
  
        status: Joi.string().allow(""),
  
        priority: this.PriorityEnum(),
  
        assigned_to: this.AgentChangePayload(),
  
        tags: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static AgentChangePayload() {
      return Joi.object({
        agent_id: Joi.string().allow("").required(),
      });
    }
  
    static CreateVideoRoomResponse() {
      return Joi.object({
        unique_name: Joi.string().allow("").required(),
      });
    }
  
    static CloseVideoRoomResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
      });
    }
  
    static CreateVideoRoomPayload() {
      return Joi.object({
        unique_name: Joi.string().allow("").required(),
  
        notify: Joi.array().items(this.NotifyUser()),
      });
    }
  
    static NotifyUser() {
      return Joi.object({
        country_code: Joi.string().allow("").required(),
  
        phone_number: Joi.string().allow("").required(),
      });
    }
  
    static Filter() {
      return Joi.object({
        priorities: Joi.array().items(this.Priority()).required(),
  
        categories: Joi.array().items(this.TicketCategory()),
  
        statuses: Joi.array().items(this.Status()).required(),
  
        assignees: Joi.array().items(Joi.any()).required(),
      });
    }
  
    static TicketHistoryPayload() {
      return Joi.object({
        value: Joi.any().required(),
  
        type: this.HistoryTypeEnum().required(),
      });
    }
  
    static CustomFormSubmissionPayload() {
      return Joi.object({
        response: Joi.array().items(this.KeyValue()).required(),
  
        attachments: Joi.array().items(this.TicketAsset()),
      });
    }
  
    static KeyValue() {
      return Joi.object({
        key: Joi.string().allow("").required(),
  
        value: Joi.any().required(),
      });
    }
  
    static GetTokenForVideoRoomResponse() {
      return Joi.object({
        access_token: Joi.string().allow("").required(),
      });
    }
  
    static GetParticipantsInsideVideoRoomResponse() {
      return Joi.object({
        participants: Joi.array().items(this.Participant()).required(),
      });
    }
  
    static Participant() {
      return Joi.object({
        user: this.UserSchema(),
  
        identity: Joi.string().allow(""),
  
        status: Joi.string().allow(""),
      });
    }
  
    static PhoneNumber() {
      return Joi.object({
        active: Joi.boolean(),
  
        primary: Joi.boolean(),
  
        verified: Joi.boolean(),
  
        phone: Joi.string().allow(""),
  
        country_code: Joi.number(),
      });
    }
  
    static Email() {
      return Joi.object({
        primary: Joi.boolean(),
  
        verified: Joi.boolean(),
  
        email: Joi.string().allow(""),
  
        active: Joi.boolean(),
      });
    }
  
    static Debug() {
      return Joi.object({
        source: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
      });
    }
  
    static SubmitCustomFormResponse() {
      return Joi.object({
        ticket: this.Ticket().required(),
      });
    }
  
    static TicketContext() {
      return Joi.object({
        application_id: Joi.string().allow(""),
  
        company_id: Joi.string().allow("").required(),
      });
    }
  
    static CreatedOn() {
      return Joi.object({
        user_agent: Joi.string().allow("").required(),
      });
    }
  
    static TicketAsset() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        value: Joi.string().allow("").required(),
  
        type: Joi.any().required(),
      });
    }
  
    static TicketContent() {
      return Joi.object({
        title: Joi.string().allow("").required(),
  
        description: Joi.string().allow(""),
  
        attachments: Joi.array().items(this.TicketAsset()),
      });
    }
  
    static AddTicketPayload() {
      return Joi.object({
        created_by: Joi.any(),
  
        status: Joi.string().allow(""),
  
        priority: this.PriorityEnum(),
  
        category: Joi.string().allow("").required(),
  
        content: this.TicketContent().required(),
      });
    }
  
    static Priority() {
      return Joi.object({
        key: this.PriorityEnum().required(),
  
        display: Joi.string().allow("").required(),
  
        color: Joi.string().allow("").required(),
      });
    }
  
    static Status() {
      return Joi.object({
        key: Joi.string().allow("").required(),
  
        display: Joi.string().allow("").required(),
  
        color: Joi.string().allow("").required(),
      });
    }
  
    static TicketCategory() {
      return Joi.object({
        key: Joi.string().allow("").required(),
  
        display: Joi.string().allow("").required(),
  
        form: this.CustomForm(),
  
        sub_categories: Joi.array().items(this.TicketSubCategory()),
  
        feedback_form: this.TicketFeedbackForm(),
      });
    }
  
    static TicketSubCategory() {
      return Joi.object({
        key: Joi.string().allow("").required(),
  
        display: Joi.string().allow("").required(),
      });
    }
  
    static TicketFeedbackForm() {
      return Joi.object({
        title: Joi.string().allow("").required(),
  
        display: Joi.array().items(Joi.any()),
      });
    }
  
    static TicketFeedbackList() {
      return Joi.object({
        items: Joi.array().items(this.TicketFeedback()),
      });
    }
  
    static TicketFeedbackPayload() {
      return Joi.object({
        form_response: Joi.any(),
      });
    }
  
    static SubmitButton() {
      return Joi.object({
        title: Joi.string().allow("").required(),
  
        title_color: Joi.string().allow("").required(),
  
        background_color: Joi.string().allow("").required(),
      });
    }
  
    static PollForAssignment() {
      return Joi.object({
        duration: Joi.number().required(),
  
        message: Joi.string().allow("").required(),
  
        success_message: Joi.string().allow("").required(),
  
        failure_message: Joi.string().allow("").required(),
      });
    }
  
    static CustomForm() {
      return Joi.object({
        application_id: Joi.string().allow("").required(),
  
        slug: Joi.string().allow("").required(),
  
        header_image: Joi.string().allow(""),
  
        title: Joi.string().allow("").required(),
  
        description: Joi.string().allow(""),
  
        priority: this.Priority().required(),
  
        login_required: Joi.boolean().required(),
  
        should_notify: Joi.boolean().required(),
  
        success_message: Joi.string().allow(""),
  
        submit_button: this.SubmitButton(),
  
        inputs: Joi.array().items(Joi.any()).required(),
  
        created_on: this.CreatedOn(),
  
        created_by: Joi.any(),
  
        poll_for_assignment: this.PollForAssignment(),
  
        _id: Joi.string().allow("").required(),
      });
    }
  
    static FeedbackResponseItem() {
      return Joi.object({
        display: Joi.string().allow("").required(),
  
        key: Joi.string().allow("").required(),
  
        value: Joi.string().allow("").required(),
      });
    }
  
    static TicketFeedback() {
      return Joi.object({
        _id: Joi.string().allow("").required(),
  
        ticket_id: Joi.string().allow("").required(),
  
        company_id: Joi.string().allow("").required(),
  
        response: Joi.array().items(this.FeedbackResponseItem()).required(),
  
        category: Joi.string().allow(""),
  
        user: Joi.any(),
  
        updated_at: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
      });
    }
  
    static TicketHistory() {
      return Joi.object({
        type: Joi.string().allow("").required(),
  
        value: Joi.any().required(),
  
        ticket_id: Joi.string().allow("").required(),
  
        created_on: this.CreatedOn(),
  
        created_by: Joi.any(),
  
        _id: Joi.string().allow("").required(),
  
        updated_at: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
      });
    }
  
    static Ticket() {
      return Joi.object({
        context: this.TicketContext(),
  
        created_on: this.CreatedOn(),
  
        response_id: Joi.string().allow(""),
  
        content: this.TicketContent(),
  
        ticket_id: Joi.string().allow("").required(),
  
        category: this.TicketCategory().required(),
  
        sub_category: this.TicketSubCategory(),
  
        source: this.TicketSourceEnum().required(),
  
        status: this.Status().required(),
  
        priority: this.Priority().required(),
  
        created_by: Joi.any(),
  
        assigned_to: Joi.any(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        _custom_json: Joi.any(),
  
        is_feedback_pending: Joi.boolean(),
  
        _id: Joi.string().allow("").required(),
  
        updated_at: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
      });
    }
  
    /*
          Enum: PriorityEnum
          Used By: Lead
      */
    static PriorityEnum() {
      return Joi.string().valid(
        "low",
  
        "medium",
  
        "high",
  
        "urgent"
      );
    }
  
    /*
          Enum: HistoryTypeEnum
          Used By: Lead
      */
    static HistoryTypeEnum() {
      return Joi.string().valid(
        "rating",
  
        "log",
  
        "comment"
      );
    }
  
    /*
          Enum: TicketAssetType
          Used By: Lead
      */
    static TicketAssetType() {
      return Joi.string().valid(
        "image",
  
        "video",
  
        "file",
  
        "youtube",
  
        "product",
  
        "collection",
  
        "brand",
  
        "shipment",
  
        "order"
      );
    }
  
    /*
          Enum: TicketSourceEnum
          Used By: Lead
      */
    static TicketSourceEnum() {
      return Joi.string().valid(
        "platform_panel",
  
        "sales_channel"
      );
    }
  
    static AvailablePageSchema() {
      return Joi.object({
        value: Joi.string().allow(""),
  
        text: Joi.string().allow(""),
  
        path: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        sections: Joi.array().items(this.AvailablePageSchemaSections()),
  
        sections_meta: Joi.array().items(
          this.AvailablePageSectionMetaAttributes()
        ),
  
        theme: Joi.string().allow(""),
  
        seo: this.AvailablePageSeo(),
  
        props: Joi.array().items(Joi.any()),
  
        _id: Joi.string().allow(""),
      });
    }
  
    static AvailablePageSectionMetaAttributes() {
      return Joi.object({
        attributes: Joi.any(),
      });
    }
  
    static AvailablePageSeo() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
      });
    }
  
    static AvailablePageSchemaSections() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        label: Joi.string().allow(""),
  
        props: Joi.any(),
  
        blocks: Joi.array().items(Joi.any()),
  
        preset: Joi.any(),
  
        predicate: this.AvailablePagePredicate(),
      });
    }
  
    static AvailablePageScreenPredicate() {
      return Joi.object({
        mobile: Joi.boolean(),
  
        desktop: Joi.boolean(),
  
        tablet: Joi.boolean(),
      });
    }
  
    static AvailablePageUserPredicate() {
      return Joi.object({
        authenticated: Joi.boolean(),
  
        anonymous: Joi.boolean(),
      });
    }
  
    static AvailablePageRoutePredicate() {
      return Joi.object({
        selected: Joi.string().allow(""),
  
        exact_url: Joi.string().allow(""),
  
        query: Joi.any(),
      });
    }
  
    static AvailablePagePredicate() {
      return Joi.object({
        screen: this.AvailablePageScreenPredicate(),
  
        user: this.AvailablePageUserPredicate(),
  
        route: this.AvailablePageRoutePredicate(),
      });
    }
  
    static AllAvailablePageSchema() {
      return Joi.object({
        pages: Joi.array().items(this.AvailablePageSchema()),
      });
    }
  
    static PaginationSchema() {
      return Joi.object({
        size: Joi.number(),
  
        item_total: Joi.number(),
  
        has_next: Joi.boolean(),
  
        type: Joi.string().allow(""),
  
        current: Joi.number(),
      });
    }
  
    static ThemesListingResponseSchema() {
      return Joi.object({
        items: Joi.array().items(this.ThemesSchema()),
  
        page: this.PaginationSchema(),
      });
    }
  
    static AddThemeRequestSchema() {
      return Joi.object({
        theme_id: Joi.string().allow(""),
      });
    }
  
    static UpgradableThemeSchema() {
      return Joi.object({
        parent_theme: Joi.string().allow(""),
  
        applied_theme: Joi.string().allow(""),
  
        upgrade: Joi.boolean(),
      });
    }
  
    static FontsSchema() {
      return Joi.object({
        items: this.FontsSchemaItems(),
  
        kind: Joi.string().allow(""),
      });
    }
  
    static BlitzkriegApiErrorSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static BlitzkriegNotFoundSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static BlitzkriegInternalServerErrorSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static FontsSchemaItems() {
      return Joi.object({
        family: Joi.string().allow(""),
  
        variants: Joi.array().items(Joi.string().allow("")),
  
        subsets: Joi.array().items(Joi.string().allow("")),
  
        version: Joi.string().allow(""),
  
        last_modified: Joi.string().allow(""),
  
        files: this.FontsSchemaItemsFiles(),
  
        category: Joi.string().allow(""),
  
        kind: Joi.string().allow(""),
      });
    }
  
    static FontsSchemaItemsFiles() {
      return Joi.object({
        regular: Joi.string().allow(""),
  
        italic: Joi.string().allow(""),
  
        bold: Joi.string().allow(""),
      });
    }
  
    static ThemesSchema() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        applied: Joi.boolean(),
  
        customized: Joi.boolean(),
  
        published: Joi.boolean(),
  
        archived: Joi.boolean(),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        version: Joi.string().allow(""),
  
        parent_theme_version: Joi.string().allow(""),
  
        parent_theme: Joi.string().allow(""),
  
        information: this.Information(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        src: this.Src(),
  
        assets: this.AssetsSchema(),
  
        available_sections: Joi.array().items(this.availableSectionSchema()),
  
        constants: Joi.any(),
  
        styles: Joi.any(),
  
        config: this.Config(),
  
        settings: Joi.any(),
  
        font: this.Font(),
  
        _id: Joi.string().allow(""),
  
        __v: Joi.number(),
  
        colors: this.Colors(),
      });
    }
  
    static availableSectionSchema() {
      return Joi.object({
        blocks: Joi.array().items(this.Blocks()),
  
        name: Joi.string().allow(""),
  
        label: Joi.string().allow(""),
  
        props: Joi.array().items(this.BlocksProps()),
      });
    }
  
    static Information() {
      return Joi.object({
        images: this.Images(),
  
        features: Joi.array().items(Joi.string().allow("")),
  
        name: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
      });
    }
  
    static Images() {
      return Joi.object({
        desktop: Joi.array().items(Joi.string().allow("")),
  
        android: Joi.array().items(Joi.string().allow("")),
  
        ios: Joi.array().items(Joi.string().allow("")),
  
        thumbnail: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static Src() {
      return Joi.object({
        link: Joi.string().allow(""),
      });
    }
  
    static AssetsSchema() {
      return Joi.object({
        umd_js: this.UmdJs(),
  
        common_js: this.CommonJs(),
  
        css: this.Css(),
      });
    }
  
    static UmdJs() {
      return Joi.object({
        link: Joi.string().allow(""),
      });
    }
  
    static CommonJs() {
      return Joi.object({
        link: Joi.string().allow(""),
      });
    }
  
    static Css() {
      return Joi.object({
        link: Joi.string().allow(""),
      });
    }
  
    static Sections() {
      return Joi.object({
        attributes: Joi.string().allow(""),
      });
    }
  
    static Config() {
      return Joi.object({
        preset: this.Preset(),
  
        global_schema: this.GlobalSchema(),
  
        current: Joi.string().allow(""),
  
        list: Joi.array().items(this.ListSchemaItem()),
      });
    }
  
    static Preset() {
      return Joi.object({
        pages: Joi.array().items(this.AvailablePageSchema()),
      });
    }
  
    static GlobalSchema() {
      return Joi.object({
        props: Joi.array().items(this.GlobalSchemaProps()),
      });
    }
  
    static ListSchemaItem() {
      return Joi.object({
        global: Joi.any(),
  
        page: Joi.array().items(this.ConfigPage()),
  
        name: Joi.string().allow(""),
      });
    }
  
    static Colors() {
      return Joi.object({
        bg_color: Joi.string().allow(""),
  
        primary_color: Joi.string().allow(""),
  
        secondary_color: Joi.string().allow(""),
  
        accent_color: Joi.string().allow(""),
  
        link_color: Joi.string().allow(""),
  
        button_secondary_color: Joi.string().allow(""),
      });
    }
  
    static Custom() {
      return Joi.object({
        props: Joi.any(),
      });
    }
  
    static ConfigPage() {
      return Joi.object({
        settings: Joi.any(),
  
        page: Joi.string().allow(""),
      });
    }
  
    static Font() {
      return Joi.object({
        family: Joi.string().allow(""),
  
        variants: this.Variants(),
      });
    }
  
    static Variants() {
      return Joi.object({
        medium: this.Medium(),
  
        semi_bold: this.SemiBold(),
  
        bold: this.Bold(),
  
        light: this.Light(),
  
        regular: this.Regular(),
      });
    }
  
    static Medium() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        file: Joi.string().allow(""),
      });
    }
  
    static SemiBold() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        file: Joi.string().allow(""),
      });
    }
  
    static Bold() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        file: Joi.string().allow(""),
      });
    }
  
    static Light() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        file: Joi.string().allow(""),
      });
    }
  
    static Regular() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        file: Joi.string().allow(""),
      });
    }
  
    static Blocks() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        props: Joi.array().items(this.BlocksProps()),
      });
    }
  
    static GlobalSchemaProps() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        label: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        category: Joi.string().allow(""),
      });
    }
  
    static BlocksProps() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        label: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static EditEmailRequestSchema() {
      return Joi.object({
        email: Joi.string().allow(""),
      });
    }
  
    static SendVerificationLinkMobileRequestSchema() {
      return Joi.object({
        verified: Joi.boolean(),
  
        active: Joi.boolean(),
  
        country_code: Joi.string().allow(""),
  
        phone: Joi.string().allow(""),
  
        primary: Joi.boolean(),
      });
    }
  
    static EditMobileRequestSchema() {
      return Joi.object({
        country_code: Joi.string().allow(""),
  
        phone: Joi.string().allow(""),
      });
    }
  
    static EditProfileRequestSchema() {
      return Joi.object({
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        mobile: this.EditProfileMobileSchema(),
  
        country_code: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        gender: Joi.string().allow(""),
  
        dob: Joi.string().allow(""),
  
        profile_pic_url: Joi.string().allow(""),
  
        android_hash: Joi.string().allow(""),
  
        sender: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
      });
    }
  
    static EditProfileMobileSchema() {
      return Joi.object({
        phone: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
      });
    }
  
    static SendEmailOtpRequestSchema() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        action: Joi.string().allow(""),
  
        token: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
      });
    }
  
    static VerifyEmailOtpRequestSchema() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        action: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        otp: Joi.string().allow(""),
      });
    }
  
    static VerifyOtpRequestSchema() {
      return Joi.object({
        request_id: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        otp: Joi.string().allow(""),
      });
    }
  
    static SendMobileOtpRequestSchema() {
      return Joi.object({
        mobile: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
  
        action: Joi.string().allow(""),
  
        token: Joi.string().allow(""),
  
        android_hash: Joi.string().allow(""),
  
        force: Joi.string().allow(""),
  
        captcha_code: Joi.string().allow(""),
      });
    }
  
    static UpdatePasswordRequestSchema() {
      return Joi.object({
        old_password: Joi.string().allow(""),
  
        new_password: Joi.string().allow(""),
      });
    }
  
    static FormRegisterRequestSchema() {
      return Joi.object({
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        gender: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        password: Joi.string().allow(""),
  
        phone: this.FormRegisterRequestSchemaPhone(),
  
        register_token: Joi.string().allow(""),
      });
    }
  
    static TokenRequestBodySchema() {
      return Joi.object({
        token: Joi.string().allow(""),
      });
    }
  
    static ForgotPasswordRequestSchema() {
      return Joi.object({
        code: Joi.string().allow(""),
  
        password: Joi.string().allow(""),
      });
    }
  
    static CodeRequestBodySchema() {
      return Joi.object({
        code: Joi.string().allow(""),
      });
    }
  
    static SendResetPasswordEmailRequestSchema() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        captcha_code: Joi.string().allow(""),
      });
    }
  
    static PasswordLoginRequestSchema() {
      return Joi.object({
        captcha_code: Joi.string().allow(""),
  
        password: Joi.string().allow(""),
  
        username: Joi.string().allow(""),
      });
    }
  
    static SendOtpRequestSchema() {
      return Joi.object({
        country_code: Joi.string().allow(""),
  
        captcha_code: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
      });
    }
  
    static OAuthRequestSchema() {
      return Joi.object({
        is_signed_in: Joi.boolean(),
  
        oauth2: this.OAuthRequestSchemaOauth2(),
  
        profile: this.OAuthRequestSchemaProfile(),
      });
    }
  
    static OAuthRequestAppleSchema() {
      return Joi.object({
        user_identifier: Joi.string().allow(""),
  
        oauth: this.OAuthRequestAppleSchemaOauth(),
  
        profile: this.OAuthRequestAppleSchemaProfile(),
      });
    }
  
    static UserObjectSchema() {
      return Joi.object({
        user: this.UserSchema(),
      });
    }
  
    static AuthSuccess() {
      return Joi.object({
        register_token: Joi.string().allow(""),
  
        user_exists: Joi.boolean(),
  
        user: this.UserSchema(),
      });
    }
  
    static SendOtpResponse() {
      return Joi.object({
        resend_timer: Joi.number(),
  
        resend_token: Joi.string().allow(""),
  
        success: Joi.boolean(),
  
        request_id: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        resend_email_token: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        verify_email_otp: Joi.boolean(),
  
        verify_mobile_otp: Joi.boolean(),
  
        user_exists: Joi.boolean(),
      });
    }
  
    static ProfileEditSuccess() {
      return Joi.object({
        user: this.UserSchema(),
  
        register_token: Joi.string().allow(""),
  
        user_exists: Joi.boolean(),
  
        verify_email_link: Joi.boolean(),
  
        verify_email_otp: Joi.boolean(),
  
        verify_mobile_otp: Joi.boolean(),
  
        email: Joi.string().allow(""),
  
        request_id: Joi.string().allow(""),
      });
    }
  
    static LoginSuccess() {
      return Joi.object({
        user: this.UserSchema(),
  
        request_id: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
      });
    }
  
    static VerifyOtpSuccess() {
      return Joi.object({
        user: this.UserSchema(),
  
        user_exists: Joi.boolean(),
  
        register_token: Joi.string().allow(""),
      });
    }
  
    static ResetPasswordSuccess() {
      return Joi.object({
        status: Joi.string().allow(""),
      });
    }
  
    static RegisterFormSuccess() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        resend_timer: Joi.number(),
  
        resend_token: Joi.string().allow(""),
  
        resend_email_token: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        success: Joi.boolean(),
  
        request_id: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
  
        verify_email_otp: Joi.boolean(),
  
        verify_mobile_otp: Joi.boolean(),
  
        user_exists: Joi.boolean(),
      });
    }
  
    static VerifyEmailSuccess() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static HasPasswordSuccess() {
      return Joi.object({
        result: Joi.boolean(),
      });
    }
  
    static LogoutSuccess() {
      return Joi.object({
        logout: Joi.boolean(),
      });
    }
  
    static OtpSuccess() {
      return Joi.object({
        resend_timer: Joi.number(),
  
        resend_token: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        success: Joi.boolean(),
  
        request_id: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
      });
    }
  
    static EmailOtpSuccess() {
      return Joi.object({
        success: Joi.boolean(),
      });
    }
  
    static SessionListSuccess() {
      return Joi.object({
        sessions: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static VerifyMobileOTPSuccess() {
      return Joi.object({
        user: this.UserSchema(),
  
        verify_mobile_link: Joi.boolean(),
      });
    }
  
    static VerifyEmailOTPSuccess() {
      return Joi.object({
        user: this.UserSchema(),
  
        verify_email_link: Joi.boolean(),
      });
    }
  
    static SendMobileVerifyLinkSuccess() {
      return Joi.object({
        verify_mobile_link: Joi.boolean(),
      });
    }
  
    static SendEmailVerifyLinkSuccess() {
      return Joi.object({
        verify_email_link: Joi.boolean(),
      });
    }
  
    static UserSearchResponseSchema() {
      return Joi.object({
        users: Joi.array().items(this.UserSchema()),
      });
    }
  
    static CustomerListResponseSchema() {
      return Joi.object({
        items: Joi.array().items(this.UserSchema()),
  
        page: this.PaginationSchema(),
      });
    }
  
    static UnauthorizedSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static UnauthenticatedSchema() {
      return Joi.object({
        authenticated: Joi.boolean(),
      });
    }
  
    static NotFoundSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static AuthenticationInternalServerErrorSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static AuthenticationApiErrorSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static ProfileEditSuccessSchema() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        verify_email_otp: Joi.boolean(),
  
        verify_email_link: Joi.boolean(),
  
        verify_mobile_otp: Joi.boolean(),
  
        user: Joi.string().allow(""),
  
        register_token: Joi.string().allow(""),
  
        user_exists: Joi.boolean(),
      });
    }
  
    static FormRegisterRequestSchemaPhone() {
      return Joi.object({
        country_code: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
      });
    }
  
    static OAuthRequestSchemaOauth2() {
      return Joi.object({
        access_token: Joi.string().allow(""),
  
        expiry: Joi.number(),
  
        refresh_token: Joi.string().allow(""),
      });
    }
  
    static OAuthRequestSchemaProfile() {
      return Joi.object({
        last_name: Joi.string().allow(""),
  
        image: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        full_name: Joi.string().allow(""),
  
        first_name: Joi.string().allow(""),
      });
    }
  
    static OAuthRequestAppleSchemaOauth() {
      return Joi.object({
        identity_token: Joi.string().allow(""),
      });
    }
  
    static OAuthRequestAppleSchemaProfile() {
      return Joi.object({
        last_name: Joi.string().allow(""),
  
        full_name: Joi.string().allow(""),
  
        first_name: Joi.string().allow(""),
      });
    }
  
    static AuthSuccessUser() {
      return Joi.object({
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        debug: this.AuthSuccessUserDebug(),
  
        active: Joi.boolean(),
  
        emails: this.AuthSuccessUserEmails(),
      });
    }
  
    static AuthSuccessUserDebug() {
      return Joi.object({
        platform: Joi.string().allow(""),
      });
    }
  
    static AuthSuccessUserEmails() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        verified: Joi.boolean(),
  
        primary: Joi.boolean(),
  
        active: Joi.boolean(),
      });
    }
  
    static CreateUserRequestSchema() {
      return Joi.object({
        phone_number: Joi.string().allow("").required(),
  
        email: Joi.string().allow(""),
  
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        gender: Joi.string().allow(""),
  
        username: Joi.string().allow("").required(),
  
        meta: Joi.any(),
      });
    }
  
    static CreateUserResponseSchema() {
      return Joi.object({
        user: this.UserSchema(),
      });
    }
  
    static CreateUserSessionRequestSchema() {
      return Joi.object({
        domain: Joi.string().allow(""),
  
        max_age: Joi.number(),
  
        user_id: Joi.string().allow(""),
      });
    }
  
    static CreateUserSessionResponseSchema() {
      return Joi.object({
        domain: Joi.string().allow(""),
  
        max_age: Joi.number(),
  
        secure: Joi.boolean(),
  
        http_only: Joi.boolean(),
  
        cookie: Joi.any(),
      });
    }
  
    static PlatformSchema() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        look_and_feel: this.LookAndFeel(),
  
        updated_at: Joi.string().allow(""),
  
        active: Joi.boolean(),
  
        forgot_password: Joi.boolean(),
  
        login: this.Login(),
  
        skip_captcha: Joi.boolean(),
  
        name: Joi.string().allow(""),
  
        meta: this.MetaSchema(),
  
        _id: Joi.string().allow(""),
  
        social: this.Social(),
  
        required_fields: this.RequiredFields(),
  
        register_required_fields: this.RegisterRequiredFields(),
  
        skip_login: Joi.boolean(),
  
        flash_card: this.FlashCard(),
  
        subtext: Joi.string().allow(""),
  
        social_tokens: this.SocialTokens(),
  
        created_at: Joi.string().allow(""),
  
        register: Joi.boolean(),
  
        mobile_image: Joi.string().allow(""),
  
        desktop_image: Joi.string().allow(""),
      });
    }
  
    static LookAndFeel() {
      return Joi.object({
        card_position: Joi.string().allow(""),
  
        background_color: Joi.string().allow(""),
      });
    }
  
    static Login() {
      return Joi.object({
        password: Joi.boolean(),
  
        otp: Joi.boolean(),
      });
    }
  
    static MetaSchema() {
      return Joi.object({
        fynd_default: Joi.boolean(),
      });
    }
  
    static Social() {
      return Joi.object({
        account_kit: Joi.boolean(),
  
        facebook: Joi.boolean(),
  
        google: Joi.boolean(),
  
        apple: Joi.boolean(),
      });
    }
  
    static RequiredFields() {
      return Joi.object({
        email: this.PlatformEmail(),
  
        mobile: this.PlatformMobile(),
      });
    }
  
    static PlatformEmail() {
      return Joi.object({
        is_required: Joi.boolean(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static PlatformMobile() {
      return Joi.object({
        is_required: Joi.boolean(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static RegisterRequiredFields() {
      return Joi.object({
        email: this.RegisterRequiredFieldsEmail(),
  
        mobile: this.RegisterRequiredFieldsMobile(),
      });
    }
  
    static RegisterRequiredFieldsEmail() {
      return Joi.object({
        is_required: Joi.boolean(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static RegisterRequiredFieldsMobile() {
      return Joi.object({
        is_required: Joi.boolean(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static FlashCard() {
      return Joi.object({
        text: Joi.string().allow(""),
  
        text_color: Joi.string().allow(""),
  
        background_color: Joi.string().allow(""),
      });
    }
  
    static SocialTokens() {
      return Joi.object({
        facebook: this.Facebook(),
  
        account_kit: this.Accountkit(),
  
        google: this.Google(),
      });
    }
  
    static Facebook() {
      return Joi.object({
        app_id: Joi.string().allow(""),
      });
    }
  
    static Accountkit() {
      return Joi.object({
        app_id: Joi.string().allow(""),
      });
    }
  
    static Google() {
      return Joi.object({
        app_id: Joi.string().allow(""),
      });
    }
  
    static UpdateUserRequestSchema() {
      return Joi.object({
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        gender: Joi.string().allow(""),
  
        meta: Joi.any(),
      });
    }
  
    static UserSchema() {
      return Joi.object({
        first_name: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        last_name: Joi.string().allow(""),
  
        phone_numbers: Joi.array().items(this.PhoneNumber()),
  
        emails: Joi.array().items(this.Email()),
  
        gender: Joi.string().allow(""),
  
        dob: Joi.string().allow(""),
  
        active: Joi.boolean(),
  
        profile_pic_url: Joi.string().allow(""),
  
        username: Joi.string().allow(""),
  
        account_type: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
  
        debug: this.Debug(),
  
        has_old_password_hash: Joi.boolean(),
  
        _id: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
      });
    }
  
    static ApplicationLegal() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        tnc: Joi.string().allow(""),
  
        policy: Joi.string().allow(""),
  
        shipping: Joi.string().allow(""),
  
        faq: Joi.array().items(this.ApplicationLegalFAQ()),
  
        _id: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
      });
    }
  
    static ApplicationLegalFAQ() {
      return Joi.object({
        question: Joi.string().allow(""),
  
        answer: Joi.string().allow(""),
      });
    }
  
    static PathMappingSchema() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        redirections: Joi.array().items(this.RedirectionSchema()),
  
        _id: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
      });
    }
  
    static RedirectionSchema() {
      return Joi.object({
        redirect_from: Joi.string().allow(""),
  
        redirect_to: Joi.string().allow(""),
      });
    }
  
    static SeoComponent() {
      return Joi.object({
        seo: this.SeoSchema(),
      });
    }
  
    static SeoSchema() {
      return Joi.object({
        app: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        robots_txt: Joi.string().allow(""),
  
        sitemap_enabled: Joi.boolean(),
  
        custom_meta_tags: Joi.array().items(Joi.any()),
  
        details: this.Detail(),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
      });
    }
  
    static CustomMetaTag() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        content: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
      });
    }
  
    static Detail() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
      });
    }
  
    static AnnouncementPageSchema() {
      return Joi.object({
        page_slug: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static EditorMeta() {
      return Joi.object({
        foreground_color: Joi.string().allow(""),
  
        background_color: Joi.string().allow(""),
  
        content_type: Joi.string().allow(""),
  
        content: Joi.string().allow(""),
      });
    }
  
    static AnnouncementAuthorSchema() {
      return Joi.object({
        created_by: Joi.string().allow(""),
  
        modified_by: Joi.string().allow(""),
      });
    }
  
    static AdminAnnouncementSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        platforms: Joi.array().items(Joi.string().allow("")),
  
        title: Joi.string().allow(""),
  
        announcement: Joi.string().allow(""),
  
        pages: Joi.array().items(this.AnnouncementPageSchema()),
  
        editor_meta: this.EditorMeta(),
  
        author: this.AnnouncementAuthorSchema(),
  
        created_at: Joi.string().allow(""),
  
        app: Joi.string().allow(""),
  
        modified_at: Joi.string().allow(""),
  
        _schedule: this.ScheduleSchema(),
      });
    }
  
    static ScheduleSchema() {
      return Joi.object({
        cron: Joi.string().allow(""),
  
        start: Joi.string().allow(""),
  
        end: Joi.string().allow(""),
  
        duration: Joi.number(),
  
        next_schedule: Joi.array().items(Joi.any()),
      });
    }
  
    static NextSchedule() {
      return Joi.object({
        start: Joi.string().allow(""),
  
        end: Joi.string().allow(""),
      });
    }
  
    static AnnouncementSchema() {
      return Joi.object({
        announcement: Joi.string().allow(""),
  
        schedule: this.ScheduleStartSchema(),
      });
    }
  
    static ScheduleStartSchema() {
      return Joi.object({
        start: Joi.string().allow(""),
  
        end: Joi.string().allow(""),
      });
    }
  
    static BlogGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.BlogSchema()),
  
        page: this.Page(),
      });
    }
  
    static ResourceContent() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static Asset() {
      return Joi.object({
        aspect_ratio: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        secure_url: Joi.string().allow(""),
      });
    }
  
    static Author() {
      return Joi.object({
        designation: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
      });
    }
  
    static BlogSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        _custom_json: Joi.any(),
  
        application: Joi.string().allow(""),
  
        archived: Joi.boolean(),
  
        author: this.Author(),
  
        content: Joi.array().items(this.ResourceContent()),
  
        feature_image: this.Asset(),
  
        published: Joi.boolean(),
  
        reading_time: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        seo: this.SEO(),
  
        _schedule: this.CronSchedule(),
  
        title: Joi.string().allow(""),
  
        date_meta: this.DateMeta(),
      });
    }
  
    static SEO() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        image: this.SEOImage(),
  
        title: Joi.string().allow(""),
      });
    }
  
    static SEOImage() {
      return Joi.object({
        url: Joi.string().allow(""),
      });
    }
  
    static DateMeta() {
      return Joi.object({
        created_on: Joi.string().allow(""),
  
        modified_on: Joi.string().allow(""),
      });
    }
  
    static BlogRequest() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        _custom_json: Joi.any(),
  
        author: this.Author(),
  
        content: Joi.array().items(this.ResourceContent()),
  
        feature_image: this.Asset(),
  
        published: Joi.boolean(),
  
        reading_time: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        title: Joi.string().allow(""),
  
        seo: this.SEO(),
  
        _schedule: this.CronSchedule(),
      });
    }
  
    static GetAnnouncementListSchema() {
      return Joi.object({
        items: Joi.array().items(this.AdminAnnouncementSchema()),
  
        page: this.Page(),
      });
    }
  
    static CreateAnnouncementSchema() {
      return Joi.object({
        message: Joi.string().allow(""),
  
        data: this.AdminAnnouncementSchema(),
      });
    }
  
    static Navigation() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        orientation: Joi.string().allow(""),
  
        created_by: this.CreatedBySchema(),
  
        date_meta: this.DateMeta(),
  
        _id: Joi.string().allow(""),
  
        position: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        navigation: this.NavigationReference(),
      });
    }
  
    static LocaleLanguage() {
      return Joi.object({
        hi: this.Language(),
  
        ar: this.Language(),
  
        en_us: this.Language(),
      });
    }
  
    static Language() {
      return Joi.object({
        display: Joi.string().allow(""),
      });
    }
  
    static Action() {
      return Joi.object({
        page: this.ActionPage(),
  
        popup: this.ActionPage(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ActionPage() {
      return Joi.object({
        params: Joi.object().pattern(
          /wd/,
          Joi.array().items(Joi.string().allow(""))
        ),
  
        query: Joi.object().pattern(
          /wd/,
          Joi.array().items(Joi.string().allow(""))
        ),
  
        url: Joi.string().allow(""),
  
        type: this.PageType().required(),
      });
    }
  
    static NavigationReference() {
      return Joi.object({
        acl: Joi.array().items(Joi.string().allow("")),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        _locale_language: this.LocaleLanguage(),
  
        image: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        action: this.Action(),
  
        active: Joi.boolean(),
  
        display: Joi.string().allow(""),
  
        sort_order: Joi.number(),
  
        sub_navigation: Joi.array().items(this.NavigationReference()),
      });
    }
  
    static LandingPage() {
      return Joi.object({
        data: this.LandingPageSchema(),
  
        success: Joi.boolean(),
      });
    }
  
    static ConfigurationSchema() {
      return Joi.object({
        sleep_time: Joi.number(),
  
        start_on_launch: Joi.boolean(),
  
        duration: Joi.number(),
  
        slide_direction: Joi.string().allow(""),
      });
    }
  
    static SlideshowMedia() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
  
        bg_color: Joi.string().allow(""),
  
        duration: Joi.number(),
  
        auto_decide_duration: Joi.boolean(),
  
        action: this.Action(),
      });
    }
  
    static Slideshow() {
      return Joi.object({
        data: this.SlideshowSchema(),
  
        success: Joi.boolean(),
      });
    }
  
    static AnnouncementsResponseSchema() {
      return Joi.object({
        announcements: Joi.object().pattern(
          /wd/,
          Joi.array().items(this.AnnouncementSchema())
        ),
  
        refresh_rate: Joi.number(),
  
        refresh_pages: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static FaqResponseSchema() {
      return Joi.object({
        faqs: Joi.array().items(this.FaqSchema()),
      });
    }
  
    static UpdateHandpickedSchema() {
      return Joi.object({
        tag: this.HandpickedTagSchema(),
      });
    }
  
    static HandpickedTagSchema() {
      return Joi.object({
        position: Joi.string().allow(""),
  
        attributes: Joi.any(),
  
        name: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        sub_type: Joi.string().allow(""),
  
        content: Joi.string().allow(""),
      });
    }
  
    static RemoveHandpickedSchema() {
      return Joi.object({
        tags: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static CreateTagSchema() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        sub_type: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
  
        position: Joi.string().allow(""),
  
        attributes: Joi.any(),
  
        content: Joi.string().allow(""),
      });
    }
  
    static CreateTagRequestSchema() {
      return Joi.object({
        tags: Joi.array().items(this.CreateTagSchema()),
      });
    }
  
    static TagDeleteSuccessResponse() {
      return Joi.object({
        success: Joi.boolean(),
      });
    }
  
    static APIError() {
      return Joi.object({
        message: Joi.string().allow(""),
  
        status: Joi.number(),
  
        code: Joi.string().allow(""),
  
        exception: Joi.string().allow(""),
  
        info: Joi.string().allow(""),
  
        request_id: Joi.string().allow(""),
  
        stack_trace: Joi.string().allow(""),
  
        meta: Joi.any(),
      });
    }
  
    static CategorySchema() {
      return Joi.object({
        index: Joi.number(),
  
        title: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        children: Joi.array().items(Joi.string().allow("")),
  
        _id: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        icon_url: Joi.string().allow(""),
  
        _custom_json: Joi.any(),
      });
    }
  
    static ChildrenSchema() {
      return Joi.object({
        question: Joi.string().allow(""),
  
        answer: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
      });
    }
  
    static CategoryRequestSchema() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
      });
    }
  
    static FAQCategorySchema() {
      return Joi.object({
        index: Joi.number(),
  
        title: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        children: Joi.array().items(this.ChildrenSchema()),
  
        _id: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        icon_url: Joi.string().allow(""),
  
        _custom_json: Joi.any(),
      });
    }
  
    static FaqSchema() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        question: Joi.string().allow(""),
  
        answer: Joi.string().allow(""),
      });
    }
  
    static FAQ() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        question: Joi.string().allow(""),
  
        answer: Joi.string().allow(""),
      });
    }
  
    static CreateFaqResponseSchema() {
      return Joi.object({
        faq: this.FaqSchema(),
      });
    }
  
    static CreateFaqSchema() {
      return Joi.object({
        faq: this.FAQ(),
      });
    }
  
    static GetFaqSchema() {
      return Joi.object({
        faqs: Joi.array().items(Joi.any()),
      });
    }
  
    static UpdateFaqCategoryRequestSchema() {
      return Joi.object({
        category: this.CategorySchema(),
      });
    }
  
    static CreateFaqCategoryRequestSchema() {
      return Joi.object({
        category: this.CategoryRequestSchema(),
      });
    }
  
    static CreateFaqCategorySchema() {
      return Joi.object({
        category: this.CategorySchema(),
      });
    }
  
    static GetFaqCategoriesSchema() {
      return Joi.object({
        categories: Joi.array().items(this.CategorySchema()),
      });
    }
  
    static GetFaqCategoryBySlugSchema() {
      return Joi.object({
        category: this.FAQCategorySchema(),
      });
    }
  
    static LandingPageGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.LandingPageSchema()),
  
        page: this.Page(),
      });
    }
  
    static LandingPageSchema() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        action: this.Action(),
  
        platform: Joi.array().items(Joi.string().allow("")),
  
        created_by: this.CreatedBySchema(),
  
        date_meta: this.DateMeta(),
  
        _id: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        archived: Joi.boolean(),
  
        _custom_json: Joi.any(),
      });
    }
  
    static DefaultNavigationResponse() {
      return Joi.object({
        items: Joi.array().items(this.NavigationSchema()),
      });
    }
  
    static NavigationGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.NavigationSchema()),
  
        page: this.Page(),
      });
    }
  
    static Orientation() {
      return Joi.object({
        portrait: Joi.array().items(Joi.string().allow("")),
  
        landscape: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static NavigationSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        archived: Joi.boolean(),
  
        name: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        platform: Joi.array().items(Joi.string().allow("")),
  
        created_by: this.CreatedBySchema(),
  
        date_meta: this.DateMeta(),
  
        orientation: this.Orientation(),
  
        version: Joi.number(),
  
        navigation: Joi.array().items(this.NavigationReference()),
      });
    }
  
    static NavigationRequest() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        platform: Joi.array().items(Joi.string().allow("")),
  
        orientation: this.Orientation(),
  
        navigation: Joi.array().items(this.NavigationReference()),
      });
    }
  
    static CustomPageSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        orientation: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        published: Joi.boolean(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        content: Joi.array().items(Joi.any()),
  
        created_by: this.CreatedBySchema(),
  
        date_meta: this.DateMeta(),
  
        _schedule: this.ScheduleSchema(),
      });
    }
  
    static ContentSchema() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        value: Joi.any(),
      });
    }
  
    static CustomPage() {
      return Joi.object({
        data: this.CustomPageSchema(),
      });
    }
  
    static FeatureImage() {
      return Joi.object({
        secure_url: Joi.string().allow(""),
      });
    }
  
    static PageGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.PageSchema()),
  
        page: this.Page(),
      });
    }
  
    static PageSpec() {
      return Joi.object({
        specifications: Joi.array().items(Joi.any()),
      });
    }
  
    static PageSpecParam() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        required: Joi.boolean(),
      });
    }
  
    static PageSpecItem() {
      return Joi.object({
        page_type: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
  
        params: Joi.array().items(this.PageSpecParam()),
  
        query: Joi.array().items(this.PageSpecParam()),
      });
    }
  
    static PageSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        component_ids: Joi.array().items(Joi.string().allow("")),
  
        content: Joi.array().items(Joi.any()),
  
        content_path: Joi.string().allow(""),
  
        created_by: this.CreatedBySchema(),
  
        date_meta: this.DateMeta(),
  
        description: Joi.string().allow(""),
  
        feature_image: this.Asset(),
  
        page_meta: Joi.array().items(Joi.any()),
  
        _schedule: this.ScheduleSchema(),
  
        _custom_json: Joi.any(),
  
        orientation: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        published: Joi.boolean(),
  
        slug: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        title: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        seo: this.SEO(),
  
        visibility: Joi.any(),
  
        archived: Joi.boolean(),
      });
    }
  
    static CreatedBySchema() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static PageContent() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        value: Joi.any(),
      });
    }
  
    static PageMeta() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        value: Joi.any(),
      });
    }
  
    static PageRequest() {
      return Joi.object({
        _schedule: this.CronSchedule(),
  
        application: Joi.string().allow(""),
  
        author: this.Author(),
  
        _custom_json: Joi.any(),
  
        orientation: Joi.string().allow(""),
  
        content: Joi.array().items(Joi.any()),
  
        feature_image: this.Asset(),
  
        published: Joi.boolean(),
  
        reading_time: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        seo: this.SEO(),
  
        title: Joi.string().allow(""),
      });
    }
  
    static CronSchedule() {
      return Joi.object({
        cron: Joi.string().allow(""),
  
        start: Joi.string().allow(""),
  
        end: Joi.string().allow(""),
  
        duration: Joi.number(),
      });
    }
  
    static PagePublishRequest() {
      return Joi.object({
        publish: Joi.boolean(),
      });
    }
  
    static PageMetaSchema() {
      return Joi.object({
        system_pages: Joi.array().items(this.NavigationSchema()),
  
        custom_pages: Joi.array().items(this.PageSchema()),
  
        application_id: Joi.string().allow(""),
      });
    }
  
    static SlideshowGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.SlideshowSchema()),
  
        page: this.Page(),
      });
    }
  
    static SlideshowSchema() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        date_meta: this.DateMeta(),
  
        application: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        configuration: this.ConfigurationSchema(),
  
        media: Joi.array().items(this.SlideshowMedia()),
  
        active: Joi.boolean(),
  
        archived: Joi.boolean(),
  
        _custom_json: Joi.any(),
      });
    }
  
    static SlideshowRequest() {
      return Joi.object({
        slug: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        configuration: this.ConfigurationSchema(),
  
        media: this.SlideshowMedia(),
  
        active: Joi.boolean(),
      });
    }
  
    static Support() {
      return Joi.object({
        created: Joi.boolean(),
  
        _id: Joi.string().allow(""),
  
        config_type: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        contact: this.ContactSchema(),
      });
    }
  
    static PhoneProperties() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
  
        number: Joi.string().allow(""),
      });
    }
  
    static PhoneSchema() {
      return Joi.object({
        active: Joi.boolean(),
  
        phone: Joi.array().items(this.PhoneProperties()),
      });
    }
  
    static EmailProperties() {
      return Joi.object({
        key: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static EmailSchema() {
      return Joi.object({
        active: Joi.boolean(),
  
        email: Joi.array().items(this.EmailProperties()),
      });
    }
  
    static ContactSchema() {
      return Joi.object({
        phone: this.PhoneSchema(),
  
        email: this.EmailSchema(),
      });
    }
  
    static TagsSchema() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        tags: Joi.array().items(this.TagSchema()),
      });
    }
  
    static TagSchema() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        sub_type: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        position: Joi.string().allow(""),
  
        attributes: Joi.any(),
  
        content: Joi.string().allow(""),
      });
    }
  
    /*
          Enum: PageType
          Used By: Content
      */
    static PageType() {
      return Joi.string().valid(
        "about-us",
  
        "addresses",
  
        "blog",
  
        "brands",
  
        "cards",
  
        "cart",
  
        "categories",
  
        "brand",
  
        "category",
  
        "collection",
  
        "collections",
  
        "contact-us",
  
        "external",
  
        "faq",
  
        "freshchat",
  
        "home",
  
        "notification-settings",
  
        "orders",
  
        "page",
  
        "policy",
  
        "product",
  
        "product-reviews",
  
        "add-product-review",
  
        "product-request",
  
        "products",
  
        "profile",
  
        "profile-basic",
  
        "profile-company",
  
        "profile-emails",
  
        "profile-phones",
  
        "rate-us",
  
        "refer-earn",
  
        "settings",
  
        "shared-cart",
  
        "tnc",
  
        "track-order",
  
        "wishlist",
  
        "sections",
  
        "form",
  
        "cart-delivery",
  
        "cart-payment",
  
        "cart-review"
      );
    }
  
    static CommunicationConsentReq() {
      return Joi.object({
        response: Joi.string().allow(""),
  
        action: Joi.string().allow(""),
  
        channel: Joi.string().allow(""),
      });
    }
  
    static CommunicationConsentRes() {
      return Joi.object({
        app_id: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
  
        channels: this.CommunicationConsentChannels(),
      });
    }
  
    static CommunicationConsentChannelsEmail() {
      return Joi.object({
        response: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
      });
    }
  
    static CommunicationConsentChannelsSms() {
      return Joi.object({
        response: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
      });
    }
  
    static CommunicationConsentChannelsWhatsapp() {
      return Joi.object({
        response: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
  
        country_code: Joi.string().allow(""),
  
        phone_number: Joi.string().allow(""),
      });
    }
  
    static CommunicationConsentChannels() {
      return Joi.object({
        email: this.CommunicationConsentChannelsEmail(),
  
        sms: this.CommunicationConsentChannelsSms(),
  
        whatsapp: this.CommunicationConsentChannelsWhatsapp(),
      });
    }
  
    static CommunicationConsent() {
      return Joi.object({
        app_id: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
  
        channels: this.CommunicationConsentChannels(),
      });
    }
  
    static PushtokenReq() {
      return Joi.object({
        action: Joi.string().allow(""),
  
        bundle_identifier: Joi.string().allow(""),
  
        push_token: Joi.string().allow(""),
  
        unique_device_id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static PushtokenRes() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        bundle_identifier: Joi.string().allow(""),
  
        push_token: Joi.string().allow(""),
  
        unique_device_id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
  
        application_id: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        expired_at: Joi.string().allow(""),
      });
    }
  
    static QRCodeResp() {
      return Joi.object({
        link: Joi.string().allow(""),
  
        svg: Joi.string().allow(""),
      });
    }
  
    static RedirectDevice() {
      return Joi.object({
        link: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static WebRedirect() {
      return Joi.object({
        link: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static Redirects() {
      return Joi.object({
        ios: this.RedirectDevice(),
  
        android: this.RedirectDevice(),
  
        web: this.WebRedirect(),
  
        force_web: Joi.boolean(),
      });
    }
  
    static CampaignShortLink() {
      return Joi.object({
        source: Joi.string().allow(""),
  
        medium: Joi.string().allow(""),
      });
    }
  
    static Attribution() {
      return Joi.object({
        campaign_cookie_expiry: Joi.string().allow(""),
      });
    }
  
    static SocialMediaTags() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        description: Joi.string().allow(""),
  
        image: Joi.string().allow(""),
      });
    }
  
    static ShortLinkReq() {
      return Joi.object({
        title: Joi.string().allow("").required(),
  
        url: Joi.string().allow("").required(),
  
        hash: Joi.string().allow(""),
  
        active: Joi.boolean(),
  
        expire_at: Joi.string().allow(""),
  
        enable_tracking: Joi.boolean(),
  
        personalized: Joi.boolean(),
  
        campaign: this.CampaignShortLink(),
  
        redirects: this.Redirects(),
  
        attribution: this.Attribution(),
  
        social_media_tags: this.SocialMediaTags(),
  
        count: Joi.number(),
      });
    }
  
    static UrlInfo() {
      return Joi.object({
        original: Joi.string().allow(""),
  
        short: Joi.string().allow(""),
  
        hash: Joi.string().allow(""),
      });
    }
  
    static ShortLinkRes() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        url: this.UrlInfo(),
  
        created_by: Joi.string().allow(""),
  
        app_redirect: Joi.boolean(),
  
        fallback: Joi.string().allow(""),
  
        active: Joi.boolean(),
  
        _id: Joi.string().allow(""),
  
        enable_tracking: Joi.boolean(),
  
        expire_at: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        updated_at: Joi.string().allow(""),
  
        personalized: Joi.boolean(),
  
        campaign: this.CampaignShortLink(),
  
        redirects: this.Redirects(),
  
        attribution: this.Attribution(),
  
        social_media_tags: this.SocialMediaTags(),
  
        count: Joi.number(),
      });
    }
  
    static ShortLinkList() {
      return Joi.object({
        items: Joi.array().items(this.ShortLinkRes()),
  
        page: this.Page(),
      });
    }
  
    static ErrorRes() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static FailedResponse() {
      return Joi.object({
        message: Joi.string().allow("").required(),
      });
    }
  
    static CDN() {
      return Joi.object({
        url: Joi.string().allow("").required(),
      });
    }
  
    static Upload() {
      return Joi.object({
        expiry: Joi.number().required(),
  
        url: Joi.string().allow("").required(),
      });
    }
  
    static StartResponse() {
      return Joi.object({
        file_name: Joi.string().allow("").required(),
  
        file_path: Joi.string().allow("").required(),
  
        content_type: Joi.string().allow("").required(),
  
        method: Joi.string().allow("").required(),
  
        namespace: Joi.string().allow("").required(),
  
        operation: Joi.string().allow("").required(),
  
        size: Joi.number().required(),
  
        upload: this.Upload().required(),
  
        cdn: this.CDN().required(),
  
        tags: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static StartRequest() {
      return Joi.object({
        file_name: Joi.string().allow("").required(),
  
        content_type: Joi.string().allow("").required(),
  
        size: Joi.number().required(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        params: Joi.any(),
      });
    }
  
    static CompleteResponse() {
      return Joi.object({
        _id: Joi.string().allow("").required(),
  
        file_name: Joi.string().allow("").required(),
  
        file_path: Joi.string().allow("").required(),
  
        content_type: Joi.string().allow("").required(),
  
        method: Joi.string().allow("").required(),
  
        namespace: Joi.string().allow("").required(),
  
        operation: Joi.string().allow("").required(),
  
        size: Joi.number().required(),
  
        upload: this.Upload().required(),
  
        cdn: this.CDN().required(),
  
        success: Joi.string().allow("").required(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        created_on: Joi.string().allow("").required(),
  
        modified_on: Joi.string().allow("").required(),
      });
    }
  
    static Opts() {
      return Joi.object({
        attempts: Joi.number(),
  
        timestamp: Joi.number(),
  
        delay: Joi.number(),
      });
    }
  
    static CopyFileTask() {
      return Joi.object({
        id: Joi.string().allow("").required(),
  
        name: Joi.string().allow("").required(),
  
        data: this.BulkRequest().required(),
  
        opts: this.Opts().required(),
  
        progress: Joi.number().required(),
  
        delay: Joi.number().required(),
  
        timestamp: Joi.number().required(),
  
        attempts_made: Joi.number().required(),
  
        stacktrace: Joi.array().items(Joi.string().allow("")),
  
        finished_on: Joi.number().required(),
  
        processed_on: Joi.number().required(),
      });
    }
  
    static BulkResponse() {
      return Joi.object({
        tracking_url: Joi.string().allow("").required(),
  
        task: this.CopyFileTask().required(),
      });
    }
  
    static ReqConfiguration() {
      return Joi.object({
        concurrency: Joi.number(),
      });
    }
  
    static Destination() {
      return Joi.object({
        namespace: Joi.string().allow("").required(),
  
        rewrite: Joi.string().allow("").required(),
  
        basepath: Joi.string().allow(""),
      });
    }
  
    static BulkRequest() {
      return Joi.object({
        urls: Joi.array().items(Joi.string().allow("")).required(),
  
        destination: this.Destination().required(),
  
        configuration: this.ReqConfiguration(),
      });
    }
  
    static Urls() {
      return Joi.object({
        url: Joi.string().allow("").required(),
  
        signed_url: Joi.string().allow("").required(),
  
        expiry: Joi.number().required(),
      });
    }
  
    static SignUrlResponse() {
      return Joi.object({
        urls: Joi.array().items(this.Urls()).required(),
      });
    }
  
    static SignUrlRequest() {
      return Joi.object({
        expiry: Joi.number().required(),
  
        urls: Joi.array().items(Joi.string().allow("")).required(),
      });
    }
  
    static DbRecord() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        tags: Joi.array().items(Joi.string().allow("")).required(),
  
        _id: Joi.string().allow("").required(),
  
        file_name: Joi.string().allow("").required(),
  
        operation: Joi.string().allow(""),
  
        namespace: Joi.string().allow("").required(),
  
        content_type: Joi.string().allow("").required(),
  
        file_path: Joi.string().allow("").required(),
  
        upload: this.Upload().required(),
  
        cdn: this.CDN().required(),
  
        created_on: Joi.string().allow("").required(),
  
        modified_on: Joi.string().allow("").required(),
      });
    }
  
    static BrowseResponse() {
      return Joi.object({
        items: Joi.array().items(this.DbRecord()).required(),
  
        page: this.Page().required(),
      });
    }
  
    static ApplicationAboutResponse() {
      return Joi.object({
        application_info: this.ApplicationInfo(),
  
        company_info: this.CompanyInfo(),
  
        owner_info: this.OwnerInfo(),
      });
    }
  
    static ApplicationInfo() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        domain: this.Domain(),
  
        website: this.ApplicationWebsite(),
  
        cors: this.ApplicationCors(),
  
        description: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        meta: this.ApplicationMeta(),
  
        token: Joi.string().allow(""),
  
        secret: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        banner: this.SecureUrl(),
  
        logo: this.SecureUrl(),
  
        is_active: Joi.boolean(),
      });
    }
  
    static CompanyInfo() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        created_on: Joi.string().allow(""),
  
        is_active: Joi.boolean(),
  
        name: Joi.string().allow(""),
  
        addresses: Joi.array().items(this.CompanyAboutAddress()),
  
        notification_emails: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static OwnerInfo() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        emails: Joi.array().items(this.UserEmail()),
  
        phone_numbers: Joi.array().items(this.UserPhoneNumber()),
  
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        profile_pic: Joi.string().allow(""),
      });
    }
  
    static AppVersionRequest() {
      return Joi.object({
        application: this.ApplicationVersionRequest().required(),
  
        device: this.Device().required(),
  
        locale: Joi.string().allow(""),
  
        timezone: Joi.string().allow(""),
      });
    }
  
    static ApplicationVersionRequest() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        name: Joi.string().allow("").required(),
  
        namespace: Joi.string().allow(""),
  
        token: Joi.string().allow(""),
  
        version: Joi.string().allow("").required(),
      });
    }
  
    static Device() {
      return Joi.object({
        build: Joi.number(),
  
        model: Joi.string().allow(""),
  
        os: this.OS().required(),
      });
    }
  
    static OS() {
      return Joi.object({
        name: Joi.string().allow("").required(),
  
        version: Joi.string().allow(""),
      });
    }
  
    static SupportedLanguage() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
      });
    }
  
    static LanguageResponse() {
      return Joi.object({
        items: Joi.array().items(this.SupportedLanguage()),
      });
    }
  
    static AppStaffResponse() {
      return Joi.object({
        staff_users: Joi.array().items(this.AppStaff()),
      });
    }
  
    static UpdateDialog() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        interval: Joi.number(),
      });
    }
  
    static OrderingStoreSelectRequest() {
      return Joi.object({
        ordering_store: this.OrderingStoreSelect().required(),
      });
    }
  
    static OrderingStoreSelect() {
      return Joi.object({
        uid: Joi.number().required(),
      });
    }
  
    static AppStaff() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        order_incent: Joi.boolean(),
  
        stores: Joi.array().items(Joi.number()),
  
        application: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
  
        user: Joi.string().allow(""),
  
        employee_code: Joi.string().allow(""),
  
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
  
        profile_pic_url: Joi.string().allow(""),
      });
    }
  
    static AppTokenResponse() {
      return Joi.object({
        tokens: this.Tokens(),
  
        _id: Joi.string().allow(""),
  
        application: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        __v: Joi.number(),
      });
    }
  
    static Tokens() {
      return Joi.object({
        firebase: this.Firebase(),
  
        moengage: this.Moengage(),
  
        segment: this.Segment(),
  
        gtm: this.Gtm(),
  
        freshchat: this.Freshchat(),
  
        safetynet: this.Safetynet(),
  
        fynd_rewards: this.FyndRewards(),
  
        google_map: this.GoogleMap(),
      });
    }
  
    static Firebase() {
      return Joi.object({
        credentials: this.Credentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static Credentials() {
      return Joi.object({
        ios: this.Ios(),
  
        android: this.Android(),
  
        project_id: Joi.string().allow(""),
  
        gcm_sender_id: Joi.string().allow(""),
  
        application_id: Joi.string().allow(""),
  
        api_key: Joi.string().allow(""),
      });
    }
  
    static Ios() {
      return Joi.object({
        application_id: Joi.string().allow(""),
  
        api_key: Joi.string().allow(""),
      });
    }
  
    static Android() {
      return Joi.object({
        application_id: Joi.string().allow(""),
  
        api_key: Joi.string().allow(""),
      });
    }
  
    static Moengage() {
      return Joi.object({
        credentials: this.MoengageCredentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static MoengageCredentials() {
      return Joi.object({
        app_id: Joi.string().allow(""),
      });
    }
  
    static Segment() {
      return Joi.object({
        credentials: this.SegmentCredentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static SegmentCredentials() {
      return Joi.object({
        write_key: Joi.string().allow(""),
      });
    }
  
    static Gtm() {
      return Joi.object({
        credentials: this.GtmCredentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static GtmCredentials() {
      return Joi.object({
        api_key: Joi.string().allow(""),
      });
    }
  
    static Freshchat() {
      return Joi.object({
        credentials: this.FreshchatCredentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static FreshchatCredentials() {
      return Joi.object({
        app_id: Joi.string().allow(""),
  
        app_key: Joi.string().allow(""),
  
        web_token: Joi.string().allow(""),
      });
    }
  
    static Safetynet() {
      return Joi.object({
        credentials: this.SafetynetCredentials(),
  
        enabled: Joi.boolean(),
      });
    }
  
    static SafetynetCredentials() {
      return Joi.object({
        api_key: Joi.string().allow(""),
      });
    }
  
    static FyndRewards() {
      return Joi.object({
        credentials: this.FyndRewardsCredentials(),
      });
    }
  
    static FyndRewardsCredentials() {
      return Joi.object({
        public_key: Joi.string().allow(""),
      });
    }
  
    static GoogleMap() {
      return Joi.object({
        credentials: this.GoogleMapCredentials(),
      });
    }
  
    static GoogleMapCredentials() {
      return Joi.object({
        api_key: Joi.string().allow(""),
      });
    }
  
    static RewardPointsConfig() {
      return Joi.object({
        credit: this.Credit(),
  
        debit: this.Debit(),
      });
    }
  
    static Credit() {
      return Joi.object({
        enabled: Joi.boolean(),
      });
    }
  
    static Debit() {
      return Joi.object({
        enabled: Joi.boolean(),
  
        auto_apply: Joi.boolean(),
  
        strategy_channel: Joi.string().allow(""),
      });
    }
  
    static ProductDetailFeature() {
      return Joi.object({
        similar: Joi.array().items(Joi.string().allow("")),
  
        seller_selection: Joi.boolean(),
  
        update_product_meta: Joi.boolean(),
  
        request_product: Joi.boolean(),
      });
    }
  
    static LaunchPage() {
      return Joi.object({
        page_type: Joi.string().allow(""),
  
        params: Joi.any(),
  
        query: Joi.any(),
      });
    }
  
    static LandingPageFeature() {
      return Joi.object({
        launch_page: this.LaunchPage(),
  
        continue_as_guest: Joi.boolean(),
  
        login_btn_text: Joi.string().allow(""),
  
        show_domain_textbox: Joi.boolean(),
  
        show_register_btn: Joi.boolean(),
      });
    }
  
    static RegistrationPageFeature() {
      return Joi.object({
        ask_store_address: Joi.boolean(),
      });
    }
  
    static AppFeature() {
      return Joi.object({
        product_detail: this.ProductDetailFeature(),
  
        landing_page: this.LandingPageFeature(),
  
        registration_page: this.RegistrationPageFeature(),
  
        home_page: this.HomePageFeature(),
  
        common: this.CommonFeature(),
  
        cart: this.CartFeature(),
  
        qr: this.QrFeature(),
  
        pcr: this.PcrFeature(),
  
        order: this.OrderFeature(),
  
        _id: Joi.string().allow(""),
  
        app: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        __v: Joi.number(),
      });
    }
  
    static HomePageFeature() {
      return Joi.object({
        order_processing: Joi.boolean(),
      });
    }
  
    static CommonFeature() {
      return Joi.object({
        communication_optin_dialog: this.CommunicationOptinDialogFeature(),
  
        deployment_store_selection: this.DeploymentStoreSelectionFeature(),
  
        listing_price: this.ListingPriceFeature(),
  
        currency: this.CurrencyFeature(),
  
        revenue_engine: this.RevenueEngineFeature(),
  
        feedback: this.FeedbackFeature(),
  
        compare_products: this.CompareProductsFeature(),
  
        reward_points: this.RewardPointsConfig(),
      });
    }
  
    static CommunicationOptinDialogFeature() {
      return Joi.object({
        visibility: Joi.boolean(),
      });
    }
  
    static DeploymentStoreSelectionFeature() {
      return Joi.object({
        enabled: Joi.boolean(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ListingPriceFeature() {
      return Joi.object({
        value: Joi.string().allow(""),
      });
    }
  
    static CurrencyFeature() {
      return Joi.object({
        value: Joi.array().items(Joi.string().allow("")),
  
        type: Joi.string().allow(""),
  
        default_currency: Joi.string().allow(""),
      });
    }
  
    static RevenueEngineFeature() {
      return Joi.object({
        enabled: Joi.boolean(),
      });
    }
  
    static FeedbackFeature() {
      return Joi.object({
        enabled: Joi.boolean(),
      });
    }
  
    static CompareProductsFeature() {
      return Joi.object({
        enabled: Joi.boolean(),
      });
    }
  
    static CartFeature() {
      return Joi.object({
        gst_input: Joi.boolean(),
  
        staff_selection: Joi.boolean(),
  
        placing_for_customer: Joi.boolean(),
  
        google_map: Joi.boolean(),
  
        revenue_engine_coupon: Joi.boolean(),
      });
    }
  
    static QrFeature() {
      return Joi.object({
        application: Joi.boolean(),
  
        products: Joi.boolean(),
  
        collections: Joi.boolean(),
      });
    }
  
    static PcrFeature() {
      return Joi.object({
        staff_selection: Joi.boolean(),
      });
    }
  
    static OrderFeature() {
      return Joi.object({
        buy_again: Joi.boolean(),
      });
    }
  
    static AppFeatureRequest() {
      return Joi.object({
        feature: this.AppFeature(),
      });
    }
  
    static AppFeatureResponse() {
      return Joi.object({
        feature: this.AppFeature(),
      });
    }
  
    static Currency() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        is_active: Joi.boolean(),
  
        name: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        decimal_digits: Joi.number(),
  
        symbol: Joi.string().allow(""),
      });
    }
  
    static Domain() {
      return Joi.object({
        verified: Joi.boolean(),
  
        is_primary: Joi.boolean(),
  
        is_shortlink: Joi.boolean(),
  
        _id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
      });
    }
  
    static ApplicationWebsite() {
      return Joi.object({
        enabled: Joi.boolean(),
  
        basepath: Joi.string().allow(""),
      });
    }
  
    static ApplicationCors() {
      return Joi.object({
        domains: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static ApplicationAuth() {
      return Joi.object({
        enabled: Joi.boolean(),
      });
    }
  
    static ApplicationRedirections() {
      return Joi.object({
        redirect_from: Joi.string().allow(""),
  
        redirect_to: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ApplicationMeta() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
      });
    }
  
    static SecureUrl() {
      return Joi.object({
        secure_url: Joi.string().allow(""),
      });
    }
  
    static Application() {
      return Joi.object({
        website: this.ApplicationWebsite(),
  
        cors: this.ApplicationCors(),
  
        auth: this.ApplicationAuth(),
  
        description: Joi.string().allow(""),
  
        channel_type: Joi.string().allow(""),
  
        cache_ttl: Joi.number(),
  
        is_internal: Joi.boolean(),
  
        is_active: Joi.boolean(),
  
        _id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        owner: Joi.string().allow(""),
  
        company_id: Joi.number(),
  
        token: Joi.string().allow(""),
  
        redirections: Joi.array().items(this.ApplicationRedirections()),
  
        meta: Joi.array().items(this.ApplicationMeta()),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        __v: Joi.number(),
  
        banner: this.SecureUrl(),
  
        logo: this.SecureUrl(),
  
        favicon: this.SecureUrl(),
  
        domains: Joi.array().items(this.Domain()),
  
        app_type: Joi.string().allow(""),
  
        mobile_logo: this.SecureUrl(),
  
        domain: this.Domain(),
      });
    }
  
    static NotFound() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static UnhandledError() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static InvalidPayloadRequest() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static SuccessMessageResponse() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static InventoryBrandRule() {
      return Joi.object({
        criteria: Joi.string().allow(""),
  
        brands: Joi.array().items(Joi.number()),
      });
    }
  
    static StoreCriteriaRule() {
      return Joi.object({
        companies: Joi.array().items(Joi.number()),
  
        brands: Joi.array().items(Joi.number()),
      });
    }
  
    static InventoryStoreRule() {
      return Joi.object({
        criteria: Joi.string().allow(""),
  
        rules: Joi.array().items(this.StoreCriteriaRule()),
  
        stores: Joi.array().items(Joi.number()),
      });
    }
  
    static InventoryPaymentConfig() {
      return Joi.object({
        mode_of_payment: Joi.string().allow(""),
  
        source: Joi.string().allow(""),
      });
    }
  
    static StorePriorityRule() {
      return Joi.object({
        enabled: Joi.boolean(),
  
        storetype_order: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static ArticleAssignmentRule() {
      return Joi.object({
        store_priority: this.StorePriorityRule(),
      });
    }
  
    static InventoryArticleAssignment() {
      return Joi.object({
        post_order_reassignment: Joi.boolean(),
  
        rules: this.ArticleAssignmentRule(),
      });
    }
  
    static CompanyAboutAddress() {
      return Joi.object({
        pincode: Joi.number(),
  
        address1: Joi.string().allow(""),
  
        address2: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
  
        state: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        address_type: Joi.string().allow(""),
      });
    }
  
    static UserEmail() {
      return Joi.object({
        active: Joi.boolean(),
  
        primary: Joi.boolean(),
  
        verified: Joi.boolean(),
  
        email: Joi.string().allow(""),
      });
    }
  
    static UserPhoneNumber() {
      return Joi.object({
        active: Joi.boolean(),
  
        primary: Joi.boolean(),
  
        verified: Joi.boolean(),
  
        country_code: Joi.number(),
  
        phone: Joi.string().allow(""),
      });
    }
  
    static ApplicationInformation() {
      return Joi.object({
        address: this.InformationAddress(),
  
        support: this.InformationSupport(),
  
        social_links: this.SocialLinks(),
  
        links: this.Links(),
  
        copyright_text: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        business_highlights: this.BusinessHighlights(),
  
        application: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        __v: Joi.number(),
      });
    }
  
    static InformationAddress() {
      return Joi.object({
        loc: Joi.string().allow(""),
  
        address_line: Joi.array().items(Joi.string().allow("")),
  
        phone: this.InformationPhone(),
  
        city: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        pincode: Joi.number(),
      });
    }
  
    static InformationPhone() {
      return Joi.object({
        code: Joi.string().allow(""),
  
        number: Joi.string().allow(""),
      });
    }
  
    static InformationSupport() {
      return Joi.object({
        phone: Joi.array().items(Joi.string().allow("")),
  
        email: Joi.array().items(Joi.string().allow("")),
  
        timing: Joi.string().allow(""),
      });
    }
  
    static SocialLinks() {
      return Joi.object({
        facebook: this.FacebookLink(),
  
        instagram: this.InstagramLink(),
  
        twitter: this.TwitterLink(),
  
        pinterest: this.PinterestLink(),
  
        google_plus: this.GooglePlusLink(),
  
        youtube: this.YoutubeLink(),
  
        linked_in: this.LinkedInLink(),
  
        vimeo: this.VimeoLink(),
  
        blog_link: this.BlogLink(),
      });
    }
  
    static FacebookLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static InstagramLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static TwitterLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static PinterestLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static GooglePlusLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static YoutubeLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static LinkedInLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static VimeoLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static BlogLink() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static Links() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        link: Joi.string().allow(""),
      });
    }
  
    static BusinessHighlights() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
  
        icon: Joi.string().allow(""),
  
        sub_title: Joi.string().allow(""),
      });
    }
  
    static ApplicationDetail() {
      return Joi.object({
        name: Joi.string().allow("").required(),
  
        description: Joi.string().allow("").required(),
  
        logo: this.SecureUrl().required(),
  
        mobile_logo: this.SecureUrl().required(),
  
        favicon: this.SecureUrl().required(),
  
        banner: this.SecureUrl().required(),
  
        domain: this.Domain(),
  
        domains: Joi.array().items(this.Domain()),
  
        _id: Joi.string().allow(""),
      });
    }
  
    static CurrenciesResponse() {
      return Joi.object({
        items: Joi.array().items(this.Currency()),
      });
    }
  
    static DefaultCurrency() {
      return Joi.object({
        ref: Joi.string().allow(""),
  
        code: Joi.string().allow(""),
      });
    }
  
    static AppCurrencyResponse() {
      return Joi.object({
        application: Joi.string().allow(""),
  
        default_currency: this.DefaultCurrency(),
  
        supported_currency: Joi.array().items(this.Currency()),
      });
    }
  
    static StoreLatLong() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        coordinates: Joi.array().items(Joi.number()),
      });
    }
  
    static OptedStoreAddress() {
      return Joi.object({
        state: Joi.string().allow(""),
  
        address1: Joi.string().allow(""),
  
        lat_long: this.StoreLatLong(),
  
        address2: Joi.string().allow(""),
  
        pincode: Joi.number(),
  
        country: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
      });
    }
  
    static OrderingStore() {
      return Joi.object({
        address: this.OptedStoreAddress(),
  
        _id: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        name: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
  
        store_type: Joi.string().allow(""),
  
        store_code: Joi.string().allow(""),
  
        pincode: Joi.number(),
  
        code: Joi.string().allow(""),
      });
    }
  
    static OrderingStores() {
      return Joi.object({
        page: this.Page(),
  
        items: Joi.array().items(this.OrderingStore()),
  
        deployed_stores: Joi.array().items(Joi.number()),
  
        all_stores: Joi.boolean(),
  
        enabled: Joi.boolean(),
  
        type: Joi.string().allow(""),
  
        _id: Joi.string().allow(""),
  
        app: Joi.string().allow(""),
  
        __v: Joi.number(),
      });
    }
  
    static OrderingStoresResponse() {
      return Joi.object({
        page: this.Page(),
  
        items: Joi.array().items(this.OrderingStore()),
      });
    }
  
    static AggregatorConfigDetail() {
      return Joi.object({
        merchant_key: Joi.string().allow("").allow(null),
  
        api: Joi.string().allow("").allow(null),
  
        verify_api: Joi.string().allow("").allow(null),
  
        secret: Joi.string().allow("").required(),
  
        merchant_id: Joi.string().allow("").allow(null),
  
        config_type: Joi.string().allow("").required(),
  
        user_id: Joi.string().allow("").allow(null),
  
        key: Joi.string().allow("").required(),
  
        sdk: Joi.boolean().allow(null),
  
        pin: Joi.string().allow("").allow(null),
      });
    }
  
    static AggregatorsConfigDetailResponse() {
      return Joi.object({
        ccavenue: this.AggregatorConfigDetail(),
  
        rupifi: this.AggregatorConfigDetail(),
  
        payumoney: this.AggregatorConfigDetail(),
  
        success: Joi.boolean().required(),
  
        mswipe: this.AggregatorConfigDetail(),
  
        env: Joi.string().allow("").required(),
  
        simpl: this.AggregatorConfigDetail(),
  
        stripe: this.AggregatorConfigDetail(),
  
        juspay: this.AggregatorConfigDetail(),
  
        razorpay: this.AggregatorConfigDetail(),
      });
    }
  
    static ErrorCodeAndDescription() {
      return Joi.object({
        code: Joi.string().allow("").required(),
  
        description: Joi.string().allow("").required(),
      });
    }
  
    static HttpErrorCodeAndResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        error: this.ErrorCodeAndDescription().required(),
      });
    }
  
    static AttachCardRequest() {
      return Joi.object({
        nickname: Joi.string().allow(""),
  
        card_id: Joi.string().allow("").allow(null).required(),
  
        name_on_card: Joi.string().allow(""),
  
        refresh: Joi.boolean().allow(null),
      });
    }
  
    static AttachCardsResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        data: Joi.any().required(),
  
        message: Joi.string().allow(""),
      });
    }
  
    static CardPaymentGateway() {
      return Joi.object({
        customer_id: Joi.string().allow("").allow(null),
  
        aggregator: Joi.string().allow("").required(),
  
        api: Joi.string().allow("").allow(null),
      });
    }
  
    static ActiveCardPaymentGatewayResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        message: Joi.string().allow("").required(),
  
        cards: this.CardPaymentGateway().required(),
      });
    }
  
    static Card() {
      return Joi.object({
        card_brand: Joi.string().allow("").allow(null),
  
        nickname: Joi.string().allow("").allow(null),
  
        card_isin: Joi.string().allow("").allow(null),
  
        card_brand_image: Joi.string().allow("").allow(null),
  
        card_fingerprint: Joi.string().allow("").allow(null),
  
        card_number: Joi.string().allow("").allow(null),
  
        card_token: Joi.string().allow("").allow(null),
  
        card_issuer: Joi.string().allow("").allow(null),
  
        card_name: Joi.string().allow("").allow(null),
  
        aggregator_name: Joi.string().allow("").required(),
  
        expired: Joi.boolean().allow(null),
  
        card_id: Joi.string().allow("").allow(null),
  
        card_reference: Joi.string().allow("").allow(null),
  
        card_type: Joi.string().allow("").allow(null),
  
        exp_year: Joi.number().allow(null),
  
        exp_month: Joi.number().allow(null),
      });
    }
  
    static ListCardsResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        data: Joi.array().items(this.Card()),
  
        message: Joi.string().allow("").required(),
      });
    }
  
    static DeletehCardRequest() {
      return Joi.object({
        card_id: Joi.string().allow("").allow(null).required(),
      });
    }
  
    static DeleteCardsResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        message: Joi.string().allow("").allow(null),
      });
    }
  
    static ValidateCustomerRequest() {
      return Joi.object({
        phone_number: Joi.string().allow("").required(),
  
        payload: Joi.string().allow("").allow(null).required(),
  
        transaction_amount_in_paise: Joi.number().required(),
  
        aggregator: Joi.string().allow("").required(),
  
        merchant_params: Joi.any().required(),
      });
    }
  
    static ValidateCustomerResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        data: Joi.any().required(),
  
        message: Joi.string().allow("").required(),
      });
    }
  
    static ChargeCustomerRequest() {
      return Joi.object({
        order_id: Joi.string().allow("").required(),
  
        transaction_token: Joi.string().allow("").allow(null),
  
        amount: Joi.number().allow(null).required(),
  
        verified: Joi.boolean().allow(null),
  
        aggregator: Joi.string().allow("").required(),
      });
    }
  
    static ChargeCustomerResponse() {
      return Joi.object({
        order_id: Joi.string().allow("").required(),
  
        success: Joi.boolean().required(),
  
        status: Joi.string().allow("").required(),
  
        cart_id: Joi.string().allow("").allow(null),
  
        message: Joi.string().allow("").required(),
  
        aggregator: Joi.string().allow("").required(),
  
        delivery_address_id: Joi.string().allow("").allow(null),
      });
    }
  
    static PaymentInitializationRequest() {
      return Joi.object({
        timeout: Joi.number().allow(null).required(),
  
        razorpay_payment_id: Joi.string().allow("").required(),
  
        method: Joi.string().allow("").required(),
  
        merchant_order_id: Joi.string().allow("").required(),
  
        aggregator_order_id: Joi.string().allow("").required(),
  
        aggregator: Joi.string().allow("").required(),
  
        customer_id: Joi.string().allow("").required(),
  
        virtual_id: Joi.string().allow("").allow(null),
  
        polling_url: Joi.string().allow("").required(),
      });
    }
  
    static PaymentInitializationResponse() {
      return Joi.object({
        timeout: Joi.number().allow(null),
  
        razorpay_payment_id: Joi.string().allow("").allow(null),
  
        method: Joi.string().allow("").required(),
  
        bqr_image: Joi.string().allow("").allow(null),
  
        merchant_order_id: Joi.string().allow("").required(),
  
        success: Joi.boolean().required(),
  
        status: Joi.string().allow(""),
  
        amount: Joi.number().allow(null),
  
        vpa: Joi.string().allow("").allow(null),
  
        aggregator_order_id: Joi.string().allow(""),
  
        aggregator: Joi.string().allow("").required(),
  
        customer_id: Joi.string().allow("").allow(null),
  
        virtual_id: Joi.string().allow("").allow(null),
  
        polling_url: Joi.string().allow("").required(),
  
        currency: Joi.string().allow("").allow(null),
      });
    }
  
    static PaymentStatusUpdateRequest() {
      return Joi.object({
        contact: Joi.string().allow("").required(),
  
        method: Joi.string().allow("").required(),
  
        order_id: Joi.string().allow("").required(),
  
        merchant_order_id: Joi.string().allow("").required(),
  
        email: Joi.string().allow("").required(),
  
        status: Joi.string().allow("").required(),
  
        amount: Joi.number().allow(null).required(),
  
        vpa: Joi.string().allow("").required(),
  
        aggregator: Joi.string().allow("").required(),
  
        customer_id: Joi.string().allow("").required(),
  
        currency: Joi.string().allow("").required(),
      });
    }
  
    static PaymentStatusUpdateResponse() {
      return Joi.object({
        status: Joi.string().allow("").required(),
  
        retry: Joi.boolean().required(),
  
        aggregator_name: Joi.string().allow("").required(),
      });
    }
  
    static AggregatorRoute() {
      return Joi.object({
        api_link: Joi.string().allow("").allow(null),
  
        data: Joi.any().allow(null),
  
        payment_flow: Joi.string().allow("").allow(null),
      });
    }
  
    static PaymentFlow() {
      return Joi.object({
        ccavenue: this.AggregatorRoute(),
  
        rupifi: this.AggregatorRoute(),
  
        fynd: this.AggregatorRoute(),
  
        payubiz: this.AggregatorRoute(),
  
        mswipe: this.AggregatorRoute(),
  
        simpl: this.AggregatorRoute(),
  
        stripe: this.AggregatorRoute(),
  
        juspay: this.AggregatorRoute(),
  
        razorpay: this.AggregatorRoute(),
  
        upi_razorpay: this.AggregatorRoute(),
  
        bqr_razorpay: this.AggregatorRoute(),
      });
    }
  
    static PaymentModeLogo() {
      return Joi.object({
        small: Joi.string().allow("").required(),
  
        large: Joi.string().allow("").required(),
      });
    }
  
    static PaymentModeList() {
      return Joi.object({
        timeout: Joi.number().allow(null),
  
        code: Joi.string().allow("").allow(null),
  
        display_priority: Joi.number().allow(null),
  
        card_number: Joi.string().allow("").allow(null),
  
        expired: Joi.boolean().allow(null),
  
        card_id: Joi.string().allow("").allow(null),
  
        card_reference: Joi.string().allow("").allow(null),
  
        card_brand: Joi.string().allow("").allow(null),
  
        merchant_code: Joi.string().allow("").allow(null),
  
        retry_count: Joi.number().allow(null),
  
        intent_app_error_list: Joi.array().items(Joi.string().allow("")),
  
        card_brand_image: Joi.string().allow("").allow(null),
  
        card_isin: Joi.string().allow("").allow(null),
  
        logo_url: this.PaymentModeLogo(),
  
        card_issuer: Joi.string().allow("").allow(null),
  
        card_type: Joi.string().allow("").allow(null),
  
        exp_year: Joi.number().allow(null),
  
        exp_month: Joi.number().allow(null),
  
        intent_flow: Joi.boolean().allow(null),
  
        nickname: Joi.string().allow("").allow(null),
  
        card_fingerprint: Joi.string().allow("").allow(null),
  
        card_token: Joi.string().allow("").allow(null),
  
        card_name: Joi.string().allow("").allow(null),
  
        name: Joi.string().allow("").allow(null),
  
        display_name: Joi.string().allow("").allow(null),
  
        fynd_vpa: Joi.string().allow("").allow(null),
  
        aggregator_name: Joi.string().allow("").required(),
      });
    }
  
    static RootPaymentMode() {
      return Joi.object({
        display_name: Joi.string().allow("").required(),
  
        display_priority: Joi.number().required(),
  
        aggregator_name: Joi.string().allow("").allow(null),
  
        anonymous_enable: Joi.boolean().allow(null),
  
        name: Joi.string().allow("").required(),
  
        add_card_enabled: Joi.boolean().allow(null),
  
        list: Joi.array().items(this.PaymentModeList()),
      });
    }
  
    static PaymentOptionAndFlow() {
      return Joi.object({
        payment_flows: this.PaymentFlow().required(),
  
        payment_option: Joi.array().items(this.RootPaymentMode()).required(),
      });
    }
  
    static PaymentModeRouteResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        payment_options: this.PaymentOptionAndFlow().required(),
      });
    }
  
    static RupifiBannerData() {
      return Joi.object({
        status: Joi.string().allow(""),
  
        kyc_url: Joi.string().allow(""),
      });
    }
  
    static RupifiBannerResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        data: this.RupifiBannerData().required(),
      });
    }
  
    static TransferItemsDetails() {
      return Joi.object({
        display_name: Joi.boolean(),
  
        logo_large: Joi.string().allow("").required(),
  
        name: Joi.string().allow("").required(),
  
        logo_small: Joi.string().allow("").required(),
  
        id: Joi.string().allow("").required(),
      });
    }
  
    static TransferModeDetails() {
      return Joi.object({
        display_name: Joi.string().allow("").required(),
  
        items: Joi.array().items(this.TransferItemsDetails()),
      });
    }
  
    static TransferModeResponse() {
      return Joi.object({
        data: Joi.array().items(this.TransferModeDetails()).required(),
      });
    }
  
    static UpdateRefundTransferModeRequest() {
      return Joi.object({
        enable: Joi.boolean().required(),
  
        transfer_mode: Joi.string().allow("").required(),
      });
    }
  
    static UpdateRefundTransferModeResponse() {
      return Joi.object({
        success: Joi.boolean(),
      });
    }
  
    static OrderBeneficiaryDetails() {
      return Joi.object({
        address: Joi.string().allow("").required(),
  
        beneficiary_id: Joi.string().allow("").required(),
  
        ifsc_code: Joi.string().allow("").required(),
  
        account_holder: Joi.string().allow("").required(),
  
        id: Joi.number().required(),
  
        mobile: Joi.boolean(),
  
        bank_name: Joi.string().allow("").required(),
  
        delights_user_name: Joi.string().allow("").required(),
  
        comment: Joi.boolean(),
  
        is_active: Joi.boolean().required(),
  
        account_no: Joi.string().allow("").required(),
  
        subtitle: Joi.string().allow("").required(),
  
        created_on: Joi.string().allow("").required(),
  
        modified_on: Joi.string().allow("").required(),
  
        transfer_mode: Joi.string().allow("").required(),
  
        display_name: Joi.string().allow("").required(),
  
        email: Joi.string().allow("").required(),
  
        branch_name: Joi.boolean(),
  
        title: Joi.string().allow("").required(),
      });
    }
  
    static OrderBeneficiaryResponse() {
      return Joi.object({
        show_beneficiary_details: Joi.boolean(),
  
        beneficiaries: Joi.array()
          .items(this.OrderBeneficiaryDetails())
          .required(),
      });
    }
  
    static NotFoundResourceError() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        code: Joi.string().allow("").required(),
  
        description: Joi.string().allow("").required(),
      });
    }
  
    static IfscCodeResponse() {
      return Joi.object({
        success: Joi.boolean(),
  
        bank_name: Joi.string().allow("").required(),
  
        branch_name: Joi.string().allow("").required(),
      });
    }
  
    static ErrorCodeDescription() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        code: Joi.string().allow("").required(),
  
        description: Joi.string().allow("").required(),
      });
    }
  
    static AddBeneficiaryViaOtpVerificationRequest() {
      return Joi.object({
        hash_key: Joi.string().allow("").required(),
  
        otp: Joi.string().allow("").required(),
  
        request_id: Joi.string().allow("").required(),
      });
    }
  
    static AddBeneficiaryViaOtpVerificationResponse() {
      return Joi.object({
        success: Joi.boolean(),
  
        message: Joi.string().allow("").required(),
      });
    }
  
    static WrongOtpError() {
      return Joi.object({
        success: Joi.string().allow("").required(),
  
        is_verified_flag: Joi.boolean().required(),
  
        description: Joi.string().allow("").required(),
      });
    }
  
    static BeneficiaryModeDetails() {
      return Joi.object({
        account_no: Joi.string().allow("").required(),
  
        address: Joi.string().allow(""),
  
        branch_name: Joi.string().allow("").required(),
  
        mobile: Joi.string().allow("").required(),
  
        bank_name: Joi.string().allow("").required(),
  
        email: Joi.string().allow("").required(),
  
        ifsc_code: Joi.string().allow("").required(),
  
        vpa: Joi.string().allow("").allow(null),
  
        comment: Joi.string().allow(""),
  
        account_holder: Joi.string().allow("").required(),
  
        wallet: Joi.string().allow("").allow(null),
      });
    }
  
    static AddBeneficiaryDetailsRequest() {
      return Joi.object({
        delights: Joi.boolean().required(),
  
        otp: Joi.string().allow(""),
  
        order_id: Joi.string().allow("").required(),
  
        request_id: Joi.string().allow(""),
  
        shipment_id: Joi.string().allow("").required(),
  
        transfer_mode: Joi.string().allow("").required(),
  
        details: this.BeneficiaryModeDetails().required(),
      });
    }
  
    static RefundAccountResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        is_verified_flag: Joi.boolean(),
  
        data: Joi.any(),
  
        message: Joi.string().allow("").required(),
      });
    }
  
    static BankDetailsForOTP() {
      return Joi.object({
        account_no: Joi.string().allow("").required(),
  
        bank_name: Joi.string().allow("").required(),
  
        ifsc_code: Joi.string().allow("").required(),
  
        account_holder: Joi.string().allow("").required(),
  
        branch_name: Joi.string().allow("").required(),
      });
    }
  
    static AddBeneficiaryDetailsOTPRequest() {
      return Joi.object({
        order_id: Joi.string().allow("").required(),
  
        details: this.BankDetailsForOTP().required(),
      });
    }
  
    static WalletOtpRequest() {
      return Joi.object({
        mobile: Joi.string().allow("").required(),
  
        country_code: Joi.string().allow("").required(),
      });
    }
  
    static WalletOtpResponse() {
      return Joi.object({
        success: Joi.boolean(),
  
        is_verified_flag: Joi.string().allow("").required(),
  
        request_id: Joi.string().allow("").required(),
      });
    }
  
    static SetDefaultBeneficiaryRequest() {
      return Joi.object({
        beneficiary_id: Joi.string().allow("").required(),
  
        order_id: Joi.string().allow("").required(),
      });
    }
  
    static SetDefaultBeneficiaryResponse() {
      return Joi.object({
        success: Joi.boolean(),
  
        is_beneficiary_set: Joi.boolean().required(),
      });
    }
  
    static OrderById() {
      return Joi.object({
        order: this.OrderSchema().required(),
      });
    }
  
    static OrderList() {
      return Joi.object({
        items: Joi.array().items(this.OrderSchema()).required(),
  
        page: this.OrderPage().required(),
  
        filters: this.OrderFilters().required(),
      });
    }
  
    static OrderPage() {
      return Joi.object({
        item_total: Joi.number(),
  
        type: Joi.string().allow(""),
  
        size: Joi.number(),
  
        current: Joi.number(),
  
        has_next: Joi.boolean(),
      });
    }
  
    static OrderFilters() {
      return Joi.object({
        statuses: Joi.array().items(this.OrderStatuses()),
      });
    }
  
    static OrderStatuses() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        value: Joi.number(),
  
        is_selected: Joi.boolean(),
      });
    }
  
    static ReqBodyVerifyOTPShipment() {
      return Joi.object({
        request_id: Joi.string().allow("").required(),
  
        otp_code: Joi.string().allow("").required(),
      });
    }
  
    static ResponseVerifyOTPShipment() {
      return Joi.object({
        success: Joi.boolean().required(),
      });
    }
  
    static sendOTPApplicationResponse() {
      return Joi.object({
        success: Joi.boolean().required(),
  
        request_id: Joi.string().allow("").required(),
  
        message: Joi.string().allow("").required(),
  
        resend_timer: Joi.number().required(),
      });
    }
  
    static ShipmentById() {
      return Joi.object({
        shipment: this.Shipments().required(),
      });
    }
  
    static CustomerDetailsByShipmentId() {
      return Joi.object({
        order_id: Joi.string().allow("").required(),
  
        shipment_id: Joi.string().allow("").required(),
  
        name: Joi.string().allow("").required(),
  
        phone: Joi.string().allow("").required(),
  
        country: Joi.string().allow("").required(),
      });
    }
  
    static ShipmentReasons() {
      return Joi.object({
        reasons: Joi.array().items(this.Reasons()).required(),
      });
    }
  
    static ShipmentStatusUpdateBody() {
      return Joi.object({
        statuses: Joi.array().items(this.StatusesBody()).required(),
  
        force_transition: Joi.boolean().required(),
      });
    }
  
    static StatusesBody() {
      return Joi.object({
        status: Joi.string().allow(""),
  
        shipments: Joi.any(),
      });
    }
  
    static ShipmentStatusUpdate() {
      return Joi.object({
        message: Joi.array().items(Joi.any()).required(),
  
        status: Joi.boolean().required(),
      });
    }
  
    static ShipmentTrack() {
      return Joi.object({
        results: Joi.array().items(this.Track()).required(),
      });
    }
  
    static OrderSchema() {
      return Joi.object({
        order_id: Joi.string().allow(""),
  
        breakup_values: Joi.array().items(this.BreakupValues()),
  
        order_created_time: Joi.string().allow(""),
  
        shipments: Joi.array().items(this.Shipments()),
  
        total_shipments_in_order: Joi.number(),
  
        user_info: this.UserInfo(),
  
        bags_for_reorder: Joi.array().items(this.BagsForReorder()),
      });
    }
  
    static BagsForReorder() {
      return Joi.object({
        item_id: Joi.number(),
  
        item_size: Joi.string().allow(""),
  
        store_id: Joi.number(),
  
        seller_id: Joi.number(),
  
        quantity: Joi.number(),
  
        article_assignment: this.BagsForReorderArticleAssignment(),
      });
    }
  
    static BagsForReorderArticleAssignment() {
      return Joi.object({
        level: Joi.string().allow(""),
  
        strategy: Joi.string().allow(""),
      });
    }
  
    static PosOrderById() {
      return Joi.object({
        order: this.OrderSchema().required(),
      });
    }
  
    static Bags() {
      return Joi.object({
        item: this.Item(),
  
        prices: this.Prices(),
  
        current_status: this.CurrentStatus(),
  
        id: Joi.number(),
  
        financial_breakup: Joi.array().items(this.FinancialBreakup()),
      });
    }
  
    static Item() {
      return Joi.object({
        brand: this.ItemBrand(),
  
        name: Joi.string().allow(""),
  
        size: Joi.string().allow(""),
  
        slug_key: Joi.string().allow(""),
  
        image: Joi.array().items(Joi.string().allow("")),
  
        code: Joi.string().allow(""),
  
        id: Joi.number(),
      });
    }
  
    static Prices() {
      return Joi.object({
        amount_paid_roundoff: Joi.number(),
  
        fynd_credits: Joi.number(),
  
        cod_charges: Joi.number(),
  
        cashback: Joi.number(),
  
        added_to_fynd_cash: Joi.boolean(),
  
        price_marked: Joi.number(),
  
        transfer_price: Joi.number(),
  
        coupon_value: Joi.number(),
  
        price_effective: Joi.number(),
  
        refund_credit: Joi.number(),
  
        amount_paid: Joi.number(),
  
        refund_amount: Joi.number(),
  
        cashback_applied: Joi.number(),
  
        gst_tax_percentage: Joi.number(),
  
        value_of_good: Joi.number(),
  
        brand_calculated_amount: Joi.number(),
  
        promotion_effective_discount: Joi.number(),
  
        discount: Joi.number(),
  
        coupon_effective_discount: Joi.number(),
  
        delivery_charge: Joi.number(),
      });
    }
  
    static CurrentStatus() {
      return Joi.object({
        updated_at: Joi.string().allow(""),
  
        status: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        journey_type: Joi.string().allow(""),
      });
    }
  
    static FinancialBreakup() {
      return Joi.object({
        brand_calculated_amount: Joi.number(),
  
        coupon_value: Joi.number(),
  
        amount_paid_roundoff: Joi.number(),
  
        gst_fee: Joi.string().allow(""),
  
        refund_credit: Joi.number(),
  
        cashback: Joi.number(),
  
        refund_amount: Joi.number(),
  
        value_of_good: Joi.number(),
  
        promotion_effective_discount: Joi.number(),
  
        size: Joi.string().allow(""),
  
        total_units: Joi.number(),
  
        discount: Joi.number(),
  
        amount_paid: Joi.number(),
  
        fynd_credits: Joi.number(),
  
        added_to_fynd_cash: Joi.boolean(),
  
        delivery_charge: Joi.number(),
  
        hsn_code: Joi.string().allow(""),
  
        coupon_effective_discount: Joi.number(),
  
        transfer_price: Joi.number(),
  
        identifiers: this.Identifiers(),
  
        gst_tag: Joi.string().allow(""),
  
        price_marked: Joi.number(),
  
        price_effective: Joi.number(),
  
        cod_charges: Joi.number(),
  
        item_name: Joi.string().allow(""),
  
        cashback_applied: Joi.number(),
  
        gst_tax_percentage: Joi.number(),
      });
    }
  
    static Identifiers() {
      return Joi.object({
        ean: Joi.string().allow(""),
  
        sku_code: Joi.string().allow(""),
      });
    }
  
    static ItemBrand() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        logo: Joi.string().allow(""),
      });
    }
  
    static BreakupValues() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        value: Joi.number(),
  
        name: Joi.string().allow(""),
      });
    }
  
    static DeliveryAddress() {
      return Joi.object({
        pincode: Joi.string().allow(""),
  
        landmark: Joi.string().allow(""),
  
        contact_person: Joi.string().allow(""),
  
        phone: Joi.string().allow(""),
  
        state: Joi.string().allow(""),
  
        version: Joi.string().allow(""),
  
        address1: Joi.string().allow(""),
  
        created_at: Joi.string().allow(""),
  
        address_type: Joi.string().allow(""),
  
        address_category: Joi.string().allow(""),
  
        area: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
  
        latitude: Joi.number(),
  
        longitude: Joi.number(),
  
        email: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        address2: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        address: Joi.string().allow(""),
      });
    }
  
    static FulfillingStore() {
      return Joi.object({
        code: Joi.string().allow(""),
  
        id: Joi.number(),
  
        name: Joi.string().allow(""),
  
        company_id: Joi.number(),
  
        company_name: Joi.string().allow(""),
      });
    }
  
    static Invoice() {
      return Joi.object({
        updated_date: Joi.string().allow(""),
  
        invoice_url: Joi.string().allow(""),
  
        label_url: Joi.string().allow(""),
      });
    }
  
    static Promise() {
      return Joi.object({
        timestamp: this.Timestamp(),
      });
    }
  
    static Timestamp() {
      return Joi.object({
        min: Joi.string().allow(""),
  
        max: Joi.string().allow(""),
      });
    }
  
    static Reasons() {
      return Joi.object({
        reason_text: Joi.string().allow(""),
  
        show_text_area: Joi.boolean(),
  
        feedback_type: Joi.string().allow(""),
  
        flow: Joi.string().allow(""),
  
        reason_id: Joi.number(),
  
        priority: Joi.number(),
      });
    }
  
    static ShipmentStatus() {
      return Joi.object({
        title: Joi.string().allow(""),
  
        hex_code: Joi.string().allow(""),
      });
    }
  
    static ShipmentUserInfo() {
      return Joi.object({
        gender: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
  
        first_name: Joi.string().allow(""),
  
        last_name: Joi.string().allow(""),
      });
    }
  
    static Shipments() {
      return Joi.object({
        order_id: Joi.string().allow(""),
  
        breakup_values: Joi.array().items(this.BreakupValues()),
  
        track_url: Joi.string().allow(""),
  
        traking_no: Joi.string().allow(""),
  
        tracking_details: Joi.array().items(this.TrackingDetails()),
  
        beneficiary_details: Joi.boolean(),
  
        can_return: Joi.boolean(),
  
        can_break: Joi.any(),
  
        prices: this.Prices(),
  
        need_help_url: Joi.string().allow(""),
  
        shipment_id: Joi.string().allow(""),
  
        total_bags: Joi.number(),
  
        delivery_address: this.DeliveryAddress(),
  
        invoice: this.Invoice(),
  
        comment: Joi.string().allow(""),
  
        order_type: Joi.string().allow(""),
  
        promise: this.Promise(),
  
        fulfilling_store: this.FulfillingStore(),
  
        bags: Joi.array().items(this.Bags()),
  
        can_cancel: Joi.boolean(),
  
        payment: this.ShipmentPayment(),
  
        shipment_created_at: Joi.string().allow(""),
  
        shipment_status: this.ShipmentStatus(),
  
        user_info: this.ShipmentUserInfo(),
  
        size_info: Joi.any(),
  
        total_details: this.ShipmentTotalDetails(),
      });
    }
  
    static ShipmentTotalDetails() {
      return Joi.object({
        total_price: Joi.number(),
  
        sizes: Joi.number(),
  
        pieces: Joi.number(),
      });
    }
  
    static ShipmentPayment() {
      return Joi.object({
        logo: Joi.string().allow(""),
  
        mode: Joi.string().allow(""),
  
        status: Joi.string().allow(""),
      });
    }
  
    static Track() {
      return Joi.object({
        awb: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        last_location_recieved_at: Joi.string().allow(""),
  
        reason: Joi.string().allow(""),
  
        shipment_type: Joi.string().allow(""),
  
        status: Joi.string().allow(""),
  
        updated_time: Joi.string().allow(""),
  
        account_name: Joi.string().allow(""),
      });
    }
  
    static TrackingDetails() {
      return Joi.object({
        is_current: Joi.boolean(),
  
        status: Joi.string().allow(""),
  
        time: Joi.string().allow(""),
  
        is_passed: Joi.boolean(),
      });
    }
  
    static UserInfo() {
      return Joi.object({
        gender: Joi.string().allow(""),
  
        mobile: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
      });
    }
  
    static ApefaceApiError() {
      return Joi.object({
        message: Joi.string().allow(""),
      });
    }
  
    static ActionPageParams() {
      return Joi.object({
        slug: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static CatalogueOrderRequest() {
      return Joi.object({
        articles: Joi.array().items(this.RewardsArticle()),
      });
    }
  
    static CatalogueOrderResponse() {
      return Joi.object({
        articles: Joi.array().items(this.RewardsArticle()),
      });
    }
  
    static DiscountProperties() {
      return Joi.object({
        absolute: Joi.number(),
  
        currency: Joi.string().allow(""),
  
        display_absolute: Joi.string().allow(""),
  
        display_percent: Joi.string().allow(""),
  
        percent: Joi.number(),
      });
    }
  
    static Error() {
      return Joi.object({
        code: Joi.number(),
  
        exception: Joi.string().allow(""),
  
        info: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
      });
    }
  
    static Offer() {
      return Joi.object({
        _schedule: this.Schedule(),
  
        active: Joi.boolean(),
  
        application_id: Joi.string().allow(""),
  
        banner_image: this.Asset(),
  
        created_at: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        rule: Joi.any(),
  
        share: this.ShareMessages(),
  
        sub_text: Joi.string().allow(""),
  
        text: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        updated_by: Joi.string().allow(""),
  
        url: Joi.string().allow(""),
      });
    }
  
    static OrderDiscountRequest() {
      return Joi.object({
        currency: Joi.string().allow(""),
  
        order_amount: Joi.number().required(),
      });
    }
  
    static OrderDiscountResponse() {
      return Joi.object({
        applied_rule_bucket: this.OrderDiscountRuleBucket(),
  
        base_discount: this.DiscountProperties(),
  
        discount: this.DiscountProperties(),
  
        order_amount: Joi.number(),
  
        points: Joi.number(),
      });
    }
  
    static OrderDiscountRuleBucket() {
      return Joi.object({
        high: Joi.number(),
  
        low: Joi.number(),
  
        max: Joi.number(),
  
        value: Joi.number(),
  
        value_type: Joi.string().allow(""),
      });
    }
  
    static PointsHistory() {
      return Joi.object({
        _id: Joi.string().allow(""),
  
        application_id: Joi.string().allow(""),
  
        claimed: Joi.boolean(),
  
        created_at: Joi.string().allow(""),
  
        expires_on: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        points: Joi.number(),
  
        remaining_points: Joi.number(),
  
        text_1: Joi.string().allow(""),
  
        text_2: Joi.string().allow(""),
  
        text_3: Joi.string().allow(""),
  
        txn_name: Joi.string().allow(""),
  
        updated_at: Joi.string().allow(""),
  
        user_id: Joi.string().allow(""),
      });
    }
  
    static PointsHistoryResponse() {
      return Joi.object({
        items: Joi.array().items(this.PointsHistory()),
  
        page: this.Page(),
      });
    }
  
    static PointsResponse() {
      return Joi.object({
        points: Joi.number(),
      });
    }
  
    static RedeemReferralCodeRequest() {
      return Joi.object({
        device_id: Joi.string().allow("").required(),
  
        referral_code: Joi.string().allow("").required(),
      });
    }
  
    static RedeemReferralCodeResponse() {
      return Joi.object({
        message: Joi.string().allow(""),
  
        points: Joi.number(),
  
        redeemed: Joi.boolean(),
  
        referrer_id: Joi.string().allow(""),
  
        referrer_info: Joi.string().allow(""),
      });
    }
  
    static ReferralDetailsResponse() {
      return Joi.object({
        referral: this.Offer(),
  
        referrer_info: Joi.string().allow(""),
  
        share: this.ShareMessages(),
  
        user: this.ReferralDetailsUser(),
      });
    }
  
    static ReferralDetailsUser() {
      return Joi.object({
        blocked: Joi.boolean(),
  
        points: Joi.number(),
  
        redeemed: Joi.boolean(),
  
        referral_code: Joi.string().allow(""),
      });
    }
  
    static RewardsArticle() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        points: Joi.number(),
  
        price: Joi.number(),
      });
    }
  
    static Schedule() {
      return Joi.object({
        cron: Joi.string().allow(""),
  
        duration: Joi.number(),
  
        end: Joi.string().allow(""),
  
        start: Joi.string().allow(""),
      });
    }
  
    static ShareMessages() {
      return Joi.object({
        email: Joi.string().allow(""),
  
        facebook: Joi.string().allow(""),
  
        fallback: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        messenger: Joi.string().allow(""),
  
        sms: Joi.string().allow(""),
  
        text: Joi.string().allow(""),
  
        twitter: Joi.string().allow(""),
  
        whatsapp: Joi.string().allow(""),
      });
    }
  
    static AbuseReport() {
      return Joi.object({
        abused: Joi.boolean(),
  
        date_meta: this.DateMeta(),
  
        description: Joi.string().allow(""),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        state: this.FeedbackState(),
  
        tags: Joi.array().items(this.TagMeta()),
      });
    }
  
    static Access() {
      return Joi.object({
        answer: Joi.boolean(),
  
        ask_question: Joi.boolean(),
  
        comment: Joi.boolean(),
  
        rnr: Joi.boolean(),
      });
    }
  
    static AddMediaListRequest() {
      return Joi.object({
        entity_id: Joi.string().allow(""),
  
        entity_type: Joi.string().allow(""),
  
        media_list: Joi.array().items(this.AddMediaRequest()),
  
        ref_id: Joi.string().allow(""),
  
        ref_type: Joi.string().allow(""),
      });
    }
  
    static AddMediaRequest() {
      return Joi.object({
        cloud_id: Joi.string().allow(""),
  
        cloud_name: Joi.string().allow(""),
  
        cloud_provider: Joi.string().allow(""),
  
        entity_id: Joi.string().allow(""),
  
        entity_type: Joi.string().allow(""),
  
        media_url: Joi.string().allow(""),
  
        ref_id: Joi.string().allow(""),
  
        ref_type: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        thumbnail_url: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ApplicationSchema() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static Attribute() {
      return Joi.object({
        date_meta: this.DateMeta(),
  
        description: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        tags: Joi.array().items(this.TagMeta()),
      });
    }
  
    static AttributeObject() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        name: Joi.string().allow("").required(),
  
        slug: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
  
        type: Joi.string().allow("").required(),
  
        value: Joi.number().required(),
      });
    }
  
    static AttributeResponse() {
      return Joi.object({
        items: Joi.array().items(this.Attribute()),
  
        page: this.Page(),
      });
    }
  
    static AutoDetectors() {
      return Joi.object({
        text_detector: Joi.array().items(this.TextDetector()),
      });
    }
  
    static CheckEligibilityResponse() {
      return Joi.object({
        access: this.Access(),
      });
    }
  
    static Cloud() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        provider: Joi.string().allow(""),
      });
    }
  
    static Comment() {
      return Joi.object({
        comment: Joi.array().items(Joi.string().allow("")),
  
        date_meta: this.DateMeta(),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        state: this.FeedbackState(),
  
        tags: Joi.array().items(this.TagMeta()),
  
        vote_count: this.VoteCount(),
      });
    }
  
    static CommentGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.Comment()),
  
        page: this.Page(),
      });
    }
  
    static CommentRequest() {
      return Joi.object({
        comment: Joi.array().items(Joi.string().allow("")).required(),
  
        entity_id: Joi.string().allow("").required(),
  
        entity_type: Joi.string().allow("").required(),
      });
    }
  
    static CreateQNARequest() {
      return Joi.object({
        choices: Joi.array().items(Joi.string().allow("")),
  
        entity_id: Joi.string().allow("").required(),
  
        entity_type: Joi.string().allow("").required(),
  
        max_len: Joi.number(),
  
        sort_priority: Joi.number(),
  
        tags: Joi.array().items(Joi.string().allow("")),
  
        text: Joi.string().allow("").required(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static CreatedBy() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        tags: Joi.array().items(this.TagMeta()),
      });
    }
  
    static CursorGetResponse() {
      return Joi.object({
        items: Joi.array().items(Joi.any()),
  
        page: this.Page(),
      });
    }
  
    static CustomerReview() {
      return Joi.object({
        auto_detectors: this.AutoDetectors(),
  
        created_on: Joi.string().allow(""),
  
        device_meta: this.DeviceMeta(),
  
        entity: this.ProductEntity(),
  
        id: Joi.string().allow(""),
  
        location_meta: this.LocationMeta(),
  
        modified_on: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        rating: this.ReviewRating(),
  
        review: this.Review(),
  
        slug: Joi.string().allow(""),
  
        state: this.State(),
  
        tags: Joi.array().items(this.TagMeta()),
  
        template: this.Template(),
  
        vote_count: this.VoteCount(),
      });
    }
  
    static DeviceMeta() {
      return Joi.object({
        app_version: Joi.string().allow(""),
  
        platform: Joi.string().allow(""),
      });
    }
  
    static Entity() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static EntityMeta() {
      return Joi.object({
        order_id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static FeedbackError() {
      return Joi.object({
        code: Joi.string().allow(""),
  
        exception: Joi.string().allow(""),
  
        info: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
  
        meta: Joi.any(),
  
        request_id: Joi.string().allow(""),
  
        stack_trace: Joi.string().allow(""),
  
        status: Joi.number(),
      });
    }
  
    static FeedbackMedia() {
      return Joi.object({
        application: this.ApplicationSchema(),
  
        cloud: this.Cloud(),
  
        created_by: this.CreatedBy(),
  
        date_meta: this.DateMeta(),
  
        description: Joi.string().allow(""),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        reference: this.Entity(),
  
        state: this.MediaState(),
  
        tags: Joi.array().items(this.TagMeta()),
  
        type: Joi.string().allow(""),
  
        url: this.Url(),
      });
    }
  
    static FeedbackState() {
      return Joi.object({
        active: Joi.boolean(),
  
        archive: Joi.boolean(),
  
        media: Joi.string().allow(""),
  
        qna: Joi.boolean(),
  
        rating: Joi.boolean(),
  
        review: Joi.boolean(),
      });
    }
  
    static GeoLoc() {
      return Joi.object({
        latitude: Joi.string().allow(""),
  
        longitude: Joi.string().allow(""),
      });
    }
  
    static InsertResponse() {
      return Joi.object({
        ids: Joi.string().allow(""),
      });
    }
  
    static Location() {
      return Joi.object({
        country_code: Joi.string().allow(""),
  
        flag_url: Joi.string().allow(""),
  
        geo_loc: this.GeoLoc(),
  
        name: Joi.string().allow(""),
  
        pincode: Joi.string().allow(""),
      });
    }
  
    static LocationMeta() {
      return Joi.object({
        demand: this.Location(),
  
        supply: this.Location(),
      });
    }
  
    static MediaGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.FeedbackMedia()),
  
        page: this.Page(),
      });
    }
  
    static MediaMeta() {
      return Joi.object({
        cloud: this.Cloud(),
  
        comment: Joi.array().items(Joi.string().allow("")),
  
        description: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
  
        url: this.Url(),
      });
    }
  
    static MediaState() {
      return Joi.object({
        approve: Joi.boolean(),
  
        archive: Joi.boolean(),
      });
    }
  
    static NumberGetResponse() {
      return Joi.object({
        items: Joi.array().items(Joi.any()),
  
        page: this.PageNumber(),
      });
    }
  
    static PageNumber() {
      return Joi.object({
        current: Joi.number(),
  
        has_next: Joi.boolean(),
  
        item_total: Joi.number(),
  
        size: Joi.number(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ProductEntity() {
      return Joi.object({
        id: Joi.string().allow(""),
  
        meta: this.EntityMeta(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static QNA() {
      return Joi.object({
        comments: Joi.array().items(this.Comment()),
  
        date_meta: this.DateMeta(),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        question: this.Question(),
  
        state: this.QNAState(),
  
        tag: Joi.array().items(Joi.string().allow("")),
  
        tags: Joi.array().items(this.TagMeta()),
      });
    }
  
    static QNAGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.QNA()),
  
        page: this.Page(),
      });
    }
  
    static QNAState() {
      return Joi.object({
        active: Joi.boolean(),
  
        approve: Joi.boolean(),
  
        modify: Joi.boolean(),
  
        priority: Joi.number(),
  
        reply: Joi.boolean(),
  
        vote: Joi.boolean(),
      });
    }
  
    static Question() {
      return Joi.object({
        choices: Joi.array().items(Joi.string().allow("")),
  
        max_len: Joi.number(),
  
        text: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static Rating() {
      return Joi.object({
        attributes: Joi.array().items(this.Attribute()),
  
        attributes_slugs: Joi.array().items(Joi.string().allow("")),
  
        ui: this.UI(),
      });
    }
  
    static RatingGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.Rating()),
  
        page: this.Page(),
      });
    }
  
    static RatingMetric() {
      return Joi.object({
        avg: Joi.number(),
  
        count: Joi.number(),
  
        name: Joi.string().allow(""),
  
        slug: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ReportAbuseGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.AbuseReport()),
  
        page: this.Page(),
      });
    }
  
    static ReportAbuseRequest() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        entity_id: Joi.string().allow("").required(),
  
        entity_type: Joi.string().allow("").required(),
      });
    }
  
    static Review() {
      return Joi.object({
        answer_ids: Joi.array().items(Joi.string().allow("")),
  
        comments: Joi.array().items(Joi.string().allow("")),
  
        description: Joi.string().allow(""),
  
        media_meta: Joi.array().items(this.MediaMeta()),
  
        title: Joi.string().allow(""),
      });
    }
  
    static ReviewFacet() {
      return Joi.object({
        display: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        selected: Joi.boolean(),
  
        slug: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ReviewGetResponse() {
      return Joi.object({
        facets: Joi.array().items(this.ReviewFacet()),
  
        items: Joi.array().items(this.CustomerReview()),
  
        page: this.Page(),
  
        sort: Joi.array().items(this.SortMethod()),
      });
    }
  
    static ReviewMediaMeta() {
      return Joi.object({
        max_count: Joi.number(),
  
        size: Joi.number(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static ReviewMetric() {
      return Joi.object({
        attribute_metric: Joi.array().items(this.RatingMetric()),
  
        created_on: Joi.string().allow(""),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        modified_on: Joi.string().allow(""),
  
        rating_avg: Joi.number(),
  
        rating_count: Joi.number(),
  
        rating_metric: Joi.array().items(this.RatingMetric()),
  
        review_count: Joi.number(),
      });
    }
  
    static ReviewMetricGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.ReviewMetric()),
  
        page: this.Page(),
      });
    }
  
    static ReviewRating() {
      return Joi.object({
        attributes: Joi.array().items(this.AttributeObject()),
  
        value: Joi.number(),
      });
    }
  
    static SaveAttributeRequest() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        name: Joi.string().allow("").required(),
  
        slug: Joi.string().allow("").required(),
      });
    }
  
    static SortMethod() {
      return Joi.object({
        name: Joi.string().allow(""),
  
        selected: Joi.boolean(),
  
        type: Joi.string().allow(""),
      });
    }
  
    static State() {
      return Joi.object({
        active: Joi.boolean(),
  
        approve: Joi.boolean(),
  
        auto_decided: Joi.boolean(),
  
        status: Joi.number(),
      });
    }
  
    static TagMeta() {
      return Joi.object({
        media: Joi.array().items(this.MediaMeta()),
  
        name: Joi.string().allow(""),
  
        type: Joi.string().allow(""),
      });
    }
  
    static Template() {
      return Joi.object({
        date_meta: this.DateMeta(),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        rating: this.Rating(),
  
        review: this.TemplateReview(),
  
        state: this.FeedbackState(),
      });
    }
  
    static TemplateGetResponse() {
      return Joi.object({
        items: Joi.array().items(this.Template()),
  
        page: this.Page(),
      });
    }
  
    static TemplateReview() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        header: Joi.string().allow(""),
  
        image_meta: this.ReviewMediaMeta(),
  
        title: Joi.string().allow(""),
  
        video_meta: this.ReviewMediaMeta(),
  
        vote_allowed: Joi.boolean(),
      });
    }
  
    static TextDetector() {
      return Joi.object({
        confidence: Joi.number(),
  
        text: Joi.string().allow(""),
  
        text_class: Joi.string().allow(""),
  
        text_type: Joi.string().allow(""),
      });
    }
  
    static UI() {
      return Joi.object({
        feedback_question: Joi.array().items(Joi.string().allow("")),
  
        icon: this.UIIcon(),
  
        text: Joi.array().items(Joi.string().allow("")),
  
        type: Joi.string().allow(""),
      });
    }
  
    static UIIcon() {
      return Joi.object({
        active: Joi.string().allow(""),
  
        inactive: Joi.string().allow(""),
  
        selected: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static UpdateAbuseStatusRequest() {
      return Joi.object({
        abusive: Joi.boolean(),
  
        active: Joi.boolean(),
  
        approve: Joi.boolean(),
  
        description: Joi.string().allow(""),
  
        entity_id: Joi.string().allow(""),
  
        entity_type: Joi.string().allow(""),
  
        id: Joi.string().allow(""),
      });
    }
  
    static UpdateAttributeRequest() {
      return Joi.object({
        description: Joi.string().allow(""),
  
        name: Joi.string().allow("").required(),
  
        slug: Joi.string().allow(""),
      });
    }
  
    static UpdateCommentRequest() {
      return Joi.object({
        active: Joi.boolean(),
  
        approve: Joi.boolean(),
  
        comment: Joi.array().items(Joi.string().allow("")).required(),
  
        id: Joi.string().allow("").required(),
      });
    }
  
    static UpdateMediaListRequest() {
      return Joi.object({
        approve: Joi.boolean(),
  
        archive: Joi.boolean(),
  
        entity_type: Joi.string().allow(""),
  
        ids: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static UpdateQNARequest() {
      return Joi.object({
        active: Joi.boolean(),
  
        approve: Joi.boolean(),
  
        choices: Joi.array().items(Joi.string().allow("")),
  
        id: Joi.string().allow(""),
  
        tags: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static UpdateResponse() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static UpdateReviewRequest() {
      return Joi.object({
        active: Joi.boolean(),
  
        application: Joi.string().allow(""),
  
        approve: Joi.boolean(),
  
        archive: Joi.boolean(),
  
        attributes_rating: Joi.array().items(this.AttributeObject()),
  
        description: Joi.string().allow(""),
  
        device_meta: this.DeviceMeta(),
  
        entity_id: Joi.string().allow(""),
  
        entity_type: Joi.string().allow(""),
  
        media_resource: Joi.array().items(this.MediaMeta()),
  
        rating: Joi.number(),
  
        review_id: Joi.string().allow(""),
  
        template_id: Joi.string().allow(""),
  
        title: Joi.string().allow(""),
      });
    }
  
    static UpdateVoteRequest() {
      return Joi.object({
        action: Joi.string().allow(""),
  
        active: Joi.boolean(),
  
        id: Joi.string().allow(""),
  
        ref_id: Joi.string().allow(""),
  
        ref_type: Joi.string().allow(""),
      });
    }
  
    static Url() {
      return Joi.object({
        main: Joi.string().allow(""),
  
        thumbnail: Joi.string().allow(""),
      });
    }
  
    static Vote() {
      return Joi.object({
        action: Joi.string().allow(""),
  
        date_meta: this.DateMeta(),
  
        entity: this.Entity(),
  
        id: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        reference: this.Entity(),
  
        state: this.FeedbackState(),
  
        tags: Joi.array().items(this.TagMeta()),
      });
    }
  
    static VoteCount() {
      return Joi.object({
        downvote: Joi.number(),
  
        upvote: Joi.number(),
      });
    }
  
    static VoteRequest() {
      return Joi.object({
        action: Joi.string().allow(""),
  
        entity_id: Joi.string().allow(""),
  
        entity_type: Joi.string().allow(""),
  
        ref_id: Joi.string().allow(""),
  
        ref_type: Joi.string().allow(""),
      });
    }
  
    static VoteResponse() {
      return Joi.object({
        items: Joi.array().items(this.Vote()),
  
        page: this.Page(),
      });
    }
  
    static UpdateCartShipmentItem() {
      return Joi.object({
        shipment_type: Joi.string().allow("").required(),
  
        article_uid: Joi.string().allow("").required(),
  
        quantity: Joi.number(),
      });
    }
  
    static UpdateCartShipmentRequest() {
      return Joi.object({
        shipments: Joi.array().items(this.UpdateCartShipmentItem()).required(),
      });
    }
  
    static Files() {
      return Joi.object({
        key: Joi.string().allow("").required(),
  
        values: Joi.array().items(Joi.string().allow("")).required(),
      });
    }
  
    static CartPosCheckoutDetailRequest() {
      return Joi.object({
        callback_url: Joi.string().allow("").allow(null),
  
        payment_identifier: Joi.string().allow("").allow(null),
  
        meta: Joi.any(),
  
        ordering_store: Joi.number().allow(null),
  
        payment_mode: Joi.string().allow("").required(),
  
        pick_at_store_uid: Joi.number().allow(null),
  
        staff: this.StaffCheckout(),
  
        extra_meta: Joi.any(),
  
        payment_params: Joi.any().allow(null),
  
        merchant_code: Joi.string().allow(""),
  
        pos: Joi.boolean(),
  
        aggregator: Joi.string().allow(""),
  
        fyndstore_emp_id: Joi.string().allow(""),
  
        delivery_address: Joi.any(),
  
        files: Joi.array().items(this.Files()),
  
        billing_address: Joi.any(),
  
        address_id: Joi.string().allow(""),
  
        payment_auto_confirm: Joi.boolean(),
  
        order_type: Joi.string().allow("").required(),
  
        billing_address_id: Joi.string().allow(""),
      });
    }
  
    static CartDeliveryModesResponse() {
      return Joi.object({
        pickup_stores: Joi.array().items(Joi.number()),
  
        available_modes: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static PickupStoreDetail() {
      return Joi.object({
        id: Joi.number(),
  
        landmark: Joi.string().allow(""),
  
        country: Joi.string().allow(""),
  
        state: Joi.string().allow(""),
  
        area_code: Joi.string().allow(""),
  
        phone: Joi.string().allow(""),
  
        store_code: Joi.string().allow(""),
  
        email: Joi.string().allow(""),
  
        pincode: Joi.number(),
  
        address: Joi.string().allow(""),
  
        area_code_slug: Joi.string().allow(""),
  
        city: Joi.string().allow(""),
  
        area: Joi.string().allow(""),
  
        uid: Joi.number(),
  
        address_type: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
      });
    }
  
    static StoreDetailsResponse() {
      return Joi.object({
        items: Joi.array().items(this.PickupStoreDetail()),
      });
    }
  
    static GetPincodeCityResponse() {
      return Joi.object({
        request_uuid: Joi.string().allow("").required(),
  
        stormbreaker_uuid: Joi.string().allow("").required(),
  
        success: Joi.boolean().required(),
  
        data: Joi.array().items(this.LogisticPincodeData()).required(),
      });
    }
  
    static LogisticPincodeData() {
      return Joi.object({
        meta: this.LogisticMeta(),
  
        parents: Joi.array().items(this.LogisticParents()),
  
        sub_type: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        error: this.LogisticError(),
  
        uid: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
      });
    }
  
    static LogisticMeta() {
      return Joi.object({
        zone: Joi.string().allow(""),
  
        deliverables: Joi.array().items(Joi.any()),
      });
    }
  
    static LogisticParents() {
      return Joi.object({
        sub_type: Joi.string().allow(""),
  
        name: Joi.string().allow(""),
  
        display_name: Joi.string().allow(""),
  
        uid: Joi.string().allow(""),
      });
    }
  
    static LogisticError() {
      return Joi.object({
        type: Joi.string().allow(""),
  
        value: Joi.string().allow(""),
  
        message: Joi.string().allow(""),
      });
    }
  
    static GetTatProductReqBody() {
      return Joi.object({
        location_details: Joi.array().items(this.LocationDetailsReq()).required(),
  
        to_pincode: Joi.string().allow("").required(),
  
        action: Joi.string().allow(""),
      });
    }
  
    static LocationDetailsReq() {
      return Joi.object({
        from_pincode: Joi.string().allow(""),
  
        articles: Joi.array().items(this.TatReqProductArticles()),
  
        fulfillment_id: Joi.number(),
      });
    }
  
    static TatReqProductArticles() {
      return Joi.object({
        category: this.LogisticRequestCategory(),
      });
    }
  
    static LogisticRequestCategory() {
      return Joi.object({
        id: Joi.number(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static GetTatProductResponse() {
      return Joi.object({
        location_details: Joi.array().items(this.LocationDetails()).required(),
  
        request_uuid: Joi.string().allow("").required(),
  
        error: Joi.any().required(),
  
        to_city: Joi.string().allow("").required(),
  
        source: Joi.string().allow("").required(),
  
        to_pincode: Joi.string().allow("").required(),
  
        action: Joi.string().allow("").required(),
  
        stormbreaker_uuid: Joi.string().allow("").required(),
  
        success: Joi.boolean().required(),
  
        identifier: Joi.string().allow("").required(),
  
        journey: Joi.string().allow("").required(),
      });
    }
  
    static LocationDetails() {
      return Joi.object({
        from_pincode: Joi.string().allow(""),
  
        articles: Joi.array().items(this.TatProductArticles()),
  
        fulfillment_id: Joi.number(),
      });
    }
  
    static TatProductArticles() {
      return Joi.object({
        error: Joi.any(),
  
        category: this.LogisticResponseCategory(),
  
        promise: this.LogisticPromise(),
      });
    }
  
    static LogisticResponseCategory() {
      return Joi.object({
        id: Joi.number(),
  
        level: Joi.string().allow(""),
      });
    }
  
    static LogisticPromise() {
      return Joi.object({
        timestamp: this.LogisticTimestamp(),
  
        formatted: this.Formatted(),
      });
    }
  
    static LogisticTimestamp() {
      return Joi.object({
        min: Joi.number(),
  
        max: Joi.number(),
      });
    }
  
    static Formatted() {
      return Joi.object({
        min: Joi.string().allow(""),
  
        max: Joi.string().allow(""),
      });
    }
  }
  
  class CatalogValidator {
    static getProductDetailBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getProductSizesBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        storeId: Joi.number(),
      }).required();
    }
  
    static getProductPriceBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        size: Joi.string().allow("").required(),
        pincode: Joi.string().allow("").required(),
        storeId: Joi.number(),
      }).required();
    }
  
    static getProductSellersBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        size: Joi.string().allow("").required(),
        pincode: Joi.string().allow("").required(),
        strategy: Joi.string().allow(""),
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getProductComparisonBySlugs() {
      return Joi.object({
        slug: Joi.array().items(Joi.string().allow("")).required(),
      }).required();
    }
  
    static getSimilarComparisonProductBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getComparedFrequentlyProductBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getProductSimilarByIdentifier() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        similarType: Joi.string().allow("").required(),
      }).required();
    }
  
    static getProductVariantsBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getProductStockByIds() {
      return Joi.object({
        itemId: Joi.string().allow(""),
        alu: Joi.string().allow(""),
        skuCode: Joi.string().allow(""),
        ean: Joi.string().allow(""),
        upc: Joi.string().allow(""),
      });
    }
  
    static getProductStockForTimeByIds() {
      return Joi.object({
        timestamp: Joi.string().allow("").required(),
        pageSize: Joi.number(),
        pageId: Joi.string().allow(""),
      }).required();
    }
  
    static getProducts() {
      return Joi.object({
        q: Joi.string().allow(""),
        f: Joi.string().allow(""),
        filters: Joi.boolean(),
        sortOn: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
        pageNo: Joi.number(),
        pageType: Joi.string().allow(""),
      });
    }
  
    static getBrands() {
      return Joi.object({
        department: Joi.string().allow(""),
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static getBrandDetailBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getCategories() {
      return Joi.object({
        department: Joi.string().allow(""),
      });
    }
  
    static getCategoryDetailBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getHomeProducts() {
      return Joi.object({
        sortOn: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      });
    }
  
    static getDepartments() {
      return Joi.object({});
    }
  
    static getSearchResults() {
      return Joi.object({
        q: Joi.string().allow("").required(),
      }).required();
    }
  
    static getCollections() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
        tag: Joi.array().items(Joi.string().allow("")),
      });
    }
  
    static getCollectionItemsBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        f: Joi.string().allow(""),
        filters: Joi.boolean(),
        sortOn: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getCollectionDetailBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getFollowedListing() {
      return Joi.object({
        collectionType: Joi.string().allow("").required(),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static followById() {
      return Joi.object({
        collectionType: Joi.string().allow("").required(),
        collectionId: Joi.string().allow("").required(),
      }).required();
    }
  
    static unfollowById() {
      return Joi.object({
        collectionType: Joi.string().allow("").required(),
        collectionId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getFollowerCountById() {
      return Joi.object({
        collectionType: Joi.string().allow("").required(),
        collectionId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getFollowIds() {
      return Joi.object({
        collectionType: Joi.string().allow(""),
      });
    }
  
    static getStores() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
        q: Joi.string().allow(""),
        city: Joi.string().allow(""),
        range: Joi.number(),
        latitude: Joi.number(),
        longitude: Joi.number(),
      });
    }
  
    static getInStockLocations() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
        q: Joi.string().allow(""),
        city: Joi.string().allow(""),
        range: Joi.number(),
        latitude: Joi.number(),
        longitude: Joi.number(),
      });
    }
  
    static getLocationDetailsById() {
      return Joi.object({
        locationId: Joi.number().required(),
      }).required();
    }
  }
  
  class CartValidator {
    static getCart() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        assignCardId: Joi.number(),
      });
    }
  
    static getCartLastModified() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static addItems() {
      return Joi.object({
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.AddCartRequest().required(),
      }).required();
    }
  
    static updateCart() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.UpdateCartRequest().required(),
      }).required();
    }
  
    static getItemCount() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static getCoupons() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static applyCoupon() {
      return Joi.object({
        i: Joi.boolean(),
        b: Joi.boolean(),
        p: Joi.boolean(),
        id: Joi.string().allow(""),
        body: Validator.ApplyCouponRequest().required(),
      }).required();
    }
  
    static removeCoupon() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static getBulkDiscountOffers() {
      return Joi.object({
        itemId: Joi.number(),
        articleId: Joi.string().allow(""),
        uid: Joi.number(),
        slug: Joi.string().allow(""),
      });
    }
  
    static applyRewardPoints() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.RewardPointRequest().required(),
      }).required();
    }
  
    static getAddresses() {
      return Joi.object({
        cartId: Joi.string().allow(""),
        mobileNo: Joi.string().allow(""),
        checkoutMode: Joi.string().allow(""),
        tags: Joi.string().allow(""),
        isDefault: Joi.boolean(),
      });
    }
  
    static addAddress() {
      return Joi.object({
        body: Validator.Address().required(),
      }).required();
    }
  
    static getAddressById() {
      return Joi.object({
        id: Joi.string().allow("").required(),
        cartId: Joi.string().allow(""),
        mobileNo: Joi.string().allow(""),
        checkoutMode: Joi.string().allow(""),
        tags: Joi.string().allow(""),
        isDefault: Joi.boolean(),
      }).required();
    }
  
    static updateAddress() {
      return Joi.object({
        id: Joi.string().allow("").required(),
        body: Validator.Address().required(),
      }).required();
    }
  
    static removeAddress() {
      return Joi.object({
        id: Joi.string().allow("").required(),
      }).required();
    }
  
    static selectAddress() {
      return Joi.object({
        cartId: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.SelectCartAddressRequest().required(),
      }).required();
    }
  
    static selectPaymentMode() {
      return Joi.object({
        id: Joi.string().allow(""),
        body: Validator.UpdateCartPaymentRequest().required(),
      }).required();
    }
  
    static validateCouponForPayment() {
      return Joi.object({
        id: Joi.string().allow(""),
        addressId: Joi.string().allow(""),
        paymentMode: Joi.string().allow(""),
        paymentIdentifier: Joi.string().allow(""),
        aggregatorName: Joi.string().allow(""),
        merchantCode: Joi.string().allow(""),
      });
    }
  
    static getShipments() {
      return Joi.object({
        p: Joi.boolean(),
        id: Joi.string().allow(""),
        addressId: Joi.string().allow(""),
        areaCode: Joi.string().allow(""),
      });
    }
  
    static checkoutCart() {
      return Joi.object({
        body: Validator.CartCheckoutDetailRequest().required(),
      }).required();
    }
  
    static updateCartMeta() {
      return Joi.object({
        id: Joi.string().allow(""),
        body: Validator.CartMetaRequest().required(),
      }).required();
    }
  
    static getCartShareLink() {
      return Joi.object({
        body: Validator.GetShareCartLinkRequest().required(),
      }).required();
    }
  
    static getCartSharedItems() {
      return Joi.object({
        token: Joi.string().allow("").required(),
      }).required();
    }
  
    static updateCartWithSharedItems() {
      return Joi.object({
        token: Joi.string().allow("").required(),
        action: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  class CommonValidator {
    static getLocations() {
      return Joi.object({
        locationType: Joi.string().allow(""),
        id: Joi.string().allow(""),
      });
    }
  }
  
  class LeadValidator {
    static getTicket() {
      return Joi.object({
        id: Joi.string().allow("").required(),
      }).required();
    }
  
    static createHistory() {
      return Joi.object({
        id: Joi.string().allow("").required(),
        body: Validator.TicketHistoryPayload().required(),
      }).required();
    }
  
    static createTicket() {
      return Joi.object({
        body: Validator.AddTicketPayload().required(),
      }).required();
    }
  
    static getCustomForm() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static submitCustomForm() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        body: Validator.CustomFormSubmissionPayload().required(),
      }).required();
    }
  
    static getParticipantsInsideVideoRoom() {
      return Joi.object({
        uniqueName: Joi.string().allow("").required(),
      }).required();
    }
  
    static getTokenForVideoRoom() {
      return Joi.object({
        uniqueName: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  class ThemeValidator {
    static getAllPages() {
      return Joi.object({
        themeId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getPage() {
      return Joi.object({
        themeId: Joi.string().allow("").required(),
        pageValue: Joi.string().allow("").required(),
      }).required();
    }
  
    static getAppliedTheme() {
      return Joi.object({});
    }
  
    static getThemeForPreview() {
      return Joi.object({
        themeId: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  class UserValidator {
    static loginWithFacebook() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.OAuthRequestSchema().required(),
      }).required();
    }
  
    static loginWithGoogle() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.OAuthRequestSchema().required(),
      }).required();
    }
  
    static loginWithGoogleAndroid() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.OAuthRequestSchema().required(),
      }).required();
    }
  
    static loginWithGoogleIOS() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.OAuthRequestSchema().required(),
      }).required();
    }
  
    static loginWithAppleIOS() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.OAuthRequestAppleSchema().required(),
      }).required();
    }
  
    static loginWithOTP() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.SendOtpRequestSchema().required(),
      }).required();
    }
  
    static loginWithEmailAndPassword() {
      return Joi.object({
        body: Validator.PasswordLoginRequestSchema().required(),
      }).required();
    }
  
    static sendResetPasswordEmail() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.SendResetPasswordEmailRequestSchema().required(),
      }).required();
    }
  
    static forgotPassword() {
      return Joi.object({
        body: Validator.ForgotPasswordRequestSchema().required(),
      }).required();
    }
  
    static sendResetToken() {
      return Joi.object({
        body: Validator.CodeRequestBodySchema().required(),
      }).required();
    }
  
    static loginWithToken() {
      return Joi.object({
        body: Validator.TokenRequestBodySchema().required(),
      }).required();
    }
  
    static registerWithForm() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.FormRegisterRequestSchema().required(),
      }).required();
    }
  
    static verifyEmail() {
      return Joi.object({
        body: Validator.CodeRequestBodySchema().required(),
      }).required();
    }
  
    static verifyMobile() {
      return Joi.object({
        body: Validator.CodeRequestBodySchema().required(),
      }).required();
    }
  
    static hasPassword() {
      return Joi.object({});
    }
  
    static updatePassword() {
      return Joi.object({
        body: Validator.UpdatePasswordRequestSchema().required(),
      }).required();
    }
  
    static logout() {
      return Joi.object({});
    }
  
    static sendOTPOnMobile() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.SendMobileOtpRequestSchema().required(),
      }).required();
    }
  
    static verifyMobileOTP() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.VerifyOtpRequestSchema().required(),
      }).required();
    }
  
    static sendOTPOnEmail() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.SendEmailOtpRequestSchema().required(),
      }).required();
    }
  
    static verifyEmailOTP() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.VerifyEmailOtpRequestSchema().required(),
      }).required();
    }
  
    static getLoggedInUser() {
      return Joi.object({});
    }
  
    static getListOfActiveSessions() {
      return Joi.object({});
    }
  
    static getPlatformConfig() {
      return Joi.object({
        name: Joi.string().allow(""),
      });
    }
  
    static updateProfile() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.EditProfileRequestSchema().required(),
      }).required();
    }
  
    static addMobileNumber() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.EditMobileRequestSchema().required(),
      }).required();
    }
  
    static deleteMobileNumber() {
      return Joi.object({
        platform: Joi.string().allow(""),
        active: Joi.boolean().required(),
        primary: Joi.boolean().required(),
        verified: Joi.boolean().required(),
        countryCode: Joi.string().allow("").required(),
        phone: Joi.string().allow("").required(),
      }).required();
    }
  
    static setMobileNumberAsPrimary() {
      return Joi.object({
        body: Validator.SendVerificationLinkMobileRequestSchema().required(),
      }).required();
    }
  
    static sendVerificationLinkToMobile() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.SendVerificationLinkMobileRequestSchema().required(),
      }).required();
    }
  
    static addEmail() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.EditEmailRequestSchema().required(),
      }).required();
    }
  
    static deleteEmail() {
      return Joi.object({
        platform: Joi.string().allow(""),
        active: Joi.boolean().required(),
        primary: Joi.boolean().required(),
        verified: Joi.boolean().required(),
        email: Joi.string().allow("").required(),
      }).required();
    }
  
    static setEmailAsPrimary() {
      return Joi.object({
        body: Validator.EditEmailRequestSchema().required(),
      }).required();
    }
  
    static sendVerificationLinkToEmail() {
      return Joi.object({
        platform: Joi.string().allow(""),
        body: Validator.EditEmailRequestSchema().required(),
      }).required();
    }
  }
  
  class ContentValidator {
    static getAnnouncements() {
      return Joi.object({});
    }
  
    static getBlog() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        rootId: Joi.string().allow(""),
      }).required();
    }
  
    static getBlogs() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static getFaqs() {
      return Joi.object({});
    }
  
    static getFaqCategories() {
      return Joi.object({});
    }
  
    static getFaqBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getFaqCategoryBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getFaqsByCategorySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getLandingPage() {
      return Joi.object({});
    }
  
    static getLegalInformation() {
      return Joi.object({});
    }
  
    static getNavigations() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static getSEOConfiguration() {
      return Joi.object({});
    }
  
    static getSlideshows() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static getSlideshow() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getSupportInformation() {
      return Joi.object({});
    }
  
    static getTags() {
      return Joi.object({});
    }
  
    static getPage() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        rootId: Joi.string().allow(""),
      }).required();
    }
  
    static getPages() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  }
  
  class CommunicationValidator {
    static getCommunicationConsent() {
      return Joi.object({});
    }
  
    static upsertCommunicationConsent() {
      return Joi.object({
        body: Validator.CommunicationConsentReq().required(),
      }).required();
    }
  
    static upsertAppPushtoken() {
      return Joi.object({
        body: Validator.PushtokenReq().required(),
      }).required();
    }
  }
  
  class ShareValidator {
    static getApplicationQRCode() {
      return Joi.object({});
    }
  
    static getProductQRCodeBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getCollectionQRCodeBySlug() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static getUrlQRCode() {
      return Joi.object({
        url: Joi.string().allow("").required(),
      }).required();
    }
  
    static createShortLink() {
      return Joi.object({
        body: Validator.ShortLinkReq().required(),
      }).required();
    }
  
    static getShortLinkByHash() {
      return Joi.object({
        hash: Joi.string().allow("").required(),
      }).required();
    }
  
    static getOriginalShortLinkByHash() {
      return Joi.object({
        hash: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  class FileStorageValidator {
    static startUpload() {
      return Joi.object({
        namespace: Joi.string().allow("").required(),
        body: Validator.StartRequest().required(),
      }).required();
    }
  
    static completeUpload() {
      return Joi.object({
        namespace: Joi.string().allow("").required(),
        body: Validator.StartResponse().required(),
      }).required();
    }
  }
  
  class ConfigurationValidator {
    static getApplication() {
      return Joi.object({});
    }
  
    static getOwnerInfo() {
      return Joi.object({});
    }
  
    static getBasicDetails() {
      return Joi.object({});
    }
  
    static getIntegrationTokens() {
      return Joi.object({});
    }
  
    static getOrderingStores() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
        q: Joi.string().allow(""),
      });
    }
  
    static getStoreDetailById() {
      return Joi.object({
        storeId: Joi.number().required(),
      }).required();
    }
  
    static getFeatures() {
      return Joi.object({});
    }
  
    static getContactInfo() {
      return Joi.object({});
    }
  
    static getCurrencies() {
      return Joi.object({});
    }
  
    static getCurrencyById() {
      return Joi.object({
        id: Joi.string().allow("").required(),
      }).required();
    }
  
    static getAppCurrencies() {
      return Joi.object({});
    }
  
    static getLanguages() {
      return Joi.object({});
    }
  
    static getOrderingStoreCookie() {
      return Joi.object({
        body: Validator.OrderingStoreSelectRequest().required(),
      }).required();
    }
  
    static removeOrderingStoreCookie() {
      return Joi.object({});
    }
  
    static getAppStaffs() {
      return Joi.object({
        orderIncent: Joi.boolean(),
        orderingStore: Joi.number(),
        user: Joi.string().allow(""),
      });
    }
  }
  
  class PaymentValidator {
    static getAggregatorsConfig() {
      return Joi.object({
        xApiToken: Joi.string().allow(""),
        refresh: Joi.boolean(),
      });
    }
  
    static attachCardToCustomer() {
      return Joi.object({
        body: Validator.AttachCardRequest().required(),
      }).required();
    }
  
    static getActiveCardAggregator() {
      return Joi.object({
        refresh: Joi.boolean(),
      });
    }
  
    static getActiveUserCards() {
      return Joi.object({
        forceRefresh: Joi.boolean(),
      });
    }
  
    static deleteUserCard() {
      return Joi.object({
        body: Validator.DeletehCardRequest().required(),
      }).required();
    }
  
    static verifyCustomerForPayment() {
      return Joi.object({
        body: Validator.ValidateCustomerRequest().required(),
      }).required();
    }
  
    static verifyAndChargePayment() {
      return Joi.object({
        body: Validator.ChargeCustomerRequest().required(),
      }).required();
    }
  
    static initialisePayment() {
      return Joi.object({
        body: Validator.PaymentInitializationRequest().required(),
      }).required();
    }
  
    static checkAndUpdatePaymentStatus() {
      return Joi.object({
        body: Validator.PaymentStatusUpdateRequest().required(),
      }).required();
    }
  
    static getPaymentModeRoutes() {
      return Joi.object({
        amount: Joi.number().required(),
        cartId: Joi.string().allow("").required(),
        pincode: Joi.string().allow("").required(),
        checkoutMode: Joi.string().allow("").required(),
        refresh: Joi.boolean(),
        cardReference: Joi.string().allow(""),
        userDetails: Joi.string().allow(""),
      }).required();
    }
  
    static getPosPaymentModeRoutes() {
      return Joi.object({
        amount: Joi.number().required(),
        cartId: Joi.string().allow("").required(),
        pincode: Joi.string().allow("").required(),
        checkoutMode: Joi.string().allow("").required(),
        refresh: Joi.boolean(),
        cardReference: Joi.string().allow(""),
        orderType: Joi.string().allow("").required(),
        userDetails: Joi.string().allow(""),
      }).required();
    }
  
    static getRupifiBannerDetails() {
      return Joi.object({});
    }
  
    static getActiveRefundTransferModes() {
      return Joi.object({});
    }
  
    static enableOrDisableRefundTransferMode() {
      return Joi.object({
        body: Validator.UpdateRefundTransferModeRequest().required(),
      }).required();
    }
  
    static getUserBeneficiariesDetail() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
      }).required();
    }
  
    static verifyIfscCode() {
      return Joi.object({
        ifscCode: Joi.string().allow(""),
      });
    }
  
    static getOrderBeneficiariesDetail() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
      }).required();
    }
  
    static verifyOtpAndAddBeneficiaryForBank() {
      return Joi.object({
        body: Validator.AddBeneficiaryViaOtpVerificationRequest().required(),
      }).required();
    }
  
    static addBeneficiaryDetails() {
      return Joi.object({
        body: Validator.AddBeneficiaryDetailsRequest().required(),
      }).required();
    }
  
    static addRefundBankAccountUsingOTP() {
      return Joi.object({
        body: Validator.AddBeneficiaryDetailsOTPRequest().required(),
      }).required();
    }
  
    static verifyOtpAndAddBeneficiaryForWallet() {
      return Joi.object({
        body: Validator.WalletOtpRequest().required(),
      }).required();
    }
  
    static updateDefaultBeneficiary() {
      return Joi.object({
        body: Validator.SetDefaultBeneficiaryRequest().required(),
      }).required();
    }
  }
  
  class OrderValidator {
    static getOrders() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
        fromDate: Joi.string().allow(""),
        toDate: Joi.string().allow(""),
        status: Joi.number(),
      });
    }
  
    static getOrderById() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getShipmentById() {
      return Joi.object({
        shipmentId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getShipmentReasons() {
      return Joi.object({
        shipmentId: Joi.string().allow("").required(),
      }).required();
    }
  
    static updateShipmentStatus() {
      return Joi.object({
        shipmentId: Joi.string().allow("").required(),
        body: Validator.ShipmentStatusUpdateBody().required(),
      }).required();
    }
  
    static trackShipment() {
      return Joi.object({
        shipmentId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getPosOrderById() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
      }).required();
    }
  
    static getCustomerDetailsByShipmentId() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
        shipmentId: Joi.string().allow("").required(),
      }).required();
    }
  
    static sendOtpToShipmentCustomer() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
        shipmentId: Joi.string().allow("").required(),
      }).required();
    }
  
    static verifyOtpShipmentCustomer() {
      return Joi.object({
        orderId: Joi.string().allow("").required(),
        shipmentId: Joi.string().allow("").required(),
        body: Validator.ReqBodyVerifyOTPShipment().required(),
      }).required();
    }
  }
  
  class RewardsValidator {
    static getPointsOnProduct() {
      return Joi.object({
        body: Validator.CatalogueOrderRequest().required(),
      }).required();
    }
  
    static getOfferByName() {
      return Joi.object({
        name: Joi.string().allow("").required(),
      }).required();
    }
  
    static getOrderDiscount() {
      return Joi.object({
        body: Validator.OrderDiscountRequest().required(),
      }).required();
    }
  
    static getUserPoints() {
      return Joi.object({});
    }
  
    static getUserPointsHistory() {
      return Joi.object({
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      });
    }
  
    static getUserReferralDetails() {
      return Joi.object({});
    }
  
    static redeemReferralCode() {
      return Joi.object({
        body: Validator.RedeemReferralCodeRequest().required(),
      }).required();
    }
  }
  
  class FeedbackValidator {
    static createAbuseReport() {
      return Joi.object({
        body: Validator.ReportAbuseRequest().required(),
      }).required();
    }
  
    static updateAbuseReport() {
      return Joi.object({
        body: Validator.UpdateAbuseStatusRequest().required(),
      }).required();
    }
  
    static getAbuseReports() {
      return Joi.object({
        entityId: Joi.string().allow("").required(),
        entityType: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getAttributes() {
      return Joi.object({
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static createAttribute() {
      return Joi.object({
        body: Validator.SaveAttributeRequest().required(),
      }).required();
    }
  
    static getAttribute() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
      }).required();
    }
  
    static updateAttribute() {
      return Joi.object({
        slug: Joi.string().allow("").required(),
        body: Validator.UpdateAttributeRequest().required(),
      }).required();
    }
  
    static createComment() {
      return Joi.object({
        body: Validator.CommentRequest().required(),
      }).required();
    }
  
    static updateComment() {
      return Joi.object({
        body: Validator.UpdateCommentRequest().required(),
      }).required();
    }
  
    static getComments() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        entityId: Joi.string().allow(""),
        userId: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static checkEligibility() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        entityId: Joi.string().allow("").required(),
      }).required();
    }
  
    static deleteMedia() {
      return Joi.object({
        ids: Joi.array().items(Joi.string().allow("")).required(),
      }).required();
    }
  
    static createMedia() {
      return Joi.object({
        body: Validator.AddMediaListRequest().required(),
      }).required();
    }
  
    static updateMedia() {
      return Joi.object({
        body: Validator.UpdateMediaListRequest().required(),
      }).required();
    }
  
    static getMedias() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        entityId: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        type: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getReviewSummaries() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        entityId: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static createReview() {
      return Joi.object({
        body: Validator.UpdateReviewRequest().required(),
      }).required();
    }
  
    static updateReview() {
      return Joi.object({
        body: Validator.UpdateReviewRequest().required(),
      }).required();
    }
  
    static getReviews() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        entityId: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        userId: Joi.string().allow(""),
        media: Joi.string().allow(""),
        rating: Joi.array().items(Joi.number()),
        attributeRating: Joi.array().items(Joi.string().allow("")),
        facets: Joi.boolean(),
        sort: Joi.string().allow(""),
        active: Joi.boolean(),
        approve: Joi.boolean(),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getTemplates() {
      return Joi.object({
        templateId: Joi.string().allow(""),
        entityId: Joi.string().allow(""),
        entityType: Joi.string().allow(""),
      });
    }
  
    static createQuestion() {
      return Joi.object({
        body: Validator.CreateQNARequest().required(),
      }).required();
    }
  
    static updateQuestion() {
      return Joi.object({
        body: Validator.UpdateQNARequest().required(),
      }).required();
    }
  
    static getQuestionAndAnswers() {
      return Joi.object({
        entityType: Joi.string().allow("").required(),
        entityId: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
        userId: Joi.string().allow(""),
        showAnswer: Joi.boolean(),
        pageId: Joi.string().allow(""),
        pageSize: Joi.number(),
      }).required();
    }
  
    static getVotes() {
      return Joi.object({
        id: Joi.string().allow(""),
        refType: Joi.string().allow(""),
        pageNo: Joi.number(),
        pageSize: Joi.number(),
      });
    }
  
    static createVote() {
      return Joi.object({
        body: Validator.VoteRequest().required(),
      }).required();
    }
  
    static updateVote() {
      return Joi.object({
        body: Validator.UpdateVoteRequest().required(),
      }).required();
    }
  }
  
  class PosCartValidator {
    static getCart() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        assignCardId: Joi.number(),
      });
    }
  
    static getCartLastModified() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static addItems() {
      return Joi.object({
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.AddCartRequest().required(),
      }).required();
    }
  
    static updateCart() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.UpdateCartRequest().required(),
      }).required();
    }
  
    static getItemCount() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static getCoupons() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static applyCoupon() {
      return Joi.object({
        i: Joi.boolean(),
        b: Joi.boolean(),
        p: Joi.boolean(),
        id: Joi.string().allow(""),
        body: Validator.ApplyCouponRequest().required(),
      }).required();
    }
  
    static removeCoupon() {
      return Joi.object({
        id: Joi.string().allow(""),
      });
    }
  
    static getBulkDiscountOffers() {
      return Joi.object({
        itemId: Joi.number(),
        articleId: Joi.string().allow(""),
        uid: Joi.number(),
        slug: Joi.string().allow(""),
      });
    }
  
    static applyRewardPoints() {
      return Joi.object({
        id: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.RewardPointRequest().required(),
      }).required();
    }
  
    static getAddresses() {
      return Joi.object({
        cartId: Joi.string().allow(""),
        mobileNo: Joi.string().allow(""),
        checkoutMode: Joi.string().allow(""),
        tags: Joi.string().allow(""),
        isDefault: Joi.boolean(),
      });
    }
  
    static addAddress() {
      return Joi.object({
        body: Validator.Address().required(),
      }).required();
    }
  
    static getAddressById() {
      return Joi.object({
        id: Joi.string().allow("").required(),
        cartId: Joi.string().allow(""),
        mobileNo: Joi.string().allow(""),
        checkoutMode: Joi.string().allow(""),
        tags: Joi.string().allow(""),
        isDefault: Joi.boolean(),
      }).required();
    }
  
    static updateAddress() {
      return Joi.object({
        id: Joi.string().allow("").required(),
        body: Validator.Address().required(),
      }).required();
    }
  
    static removeAddress() {
      return Joi.object({
        id: Joi.string().allow("").required(),
      }).required();
    }
  
    static selectAddress() {
      return Joi.object({
        cartId: Joi.string().allow(""),
        i: Joi.boolean(),
        b: Joi.boolean(),
        body: Validator.SelectCartAddressRequest().required(),
      }).required();
    }
  
    static selectPaymentMode() {
      return Joi.object({
        id: Joi.string().allow(""),
        body: Validator.UpdateCartPaymentRequest().required(),
      }).required();
    }
  
    static validateCouponForPayment() {
      return Joi.object({
        id: Joi.string().allow(""),
        addressId: Joi.string().allow(""),
        paymentMode: Joi.string().allow(""),
        paymentIdentifier: Joi.string().allow(""),
        aggregatorName: Joi.string().allow(""),
        merchantCode: Joi.string().allow(""),
      });
    }
  
    static getShipments() {
      return Joi.object({
        pickAtStoreUid: Joi.number(),
        orderingStoreId: Joi.number(),
        p: Joi.boolean(),
        id: Joi.string().allow(""),
        addressId: Joi.string().allow(""),
        areaCode: Joi.string().allow(""),
        orderType: Joi.string().allow(""),
      });
    }
  
    static updateShipments() {
      return Joi.object({
        i: Joi.boolean(),
        p: Joi.boolean(),
        id: Joi.string().allow(""),
        addressId: Joi.string().allow(""),
        orderType: Joi.string().allow(""),
        body: Validator.UpdateCartShipmentRequest().required(),
      }).required();
    }
  
    static checkoutCart() {
      return Joi.object({
        id: Joi.string().allow(""),
        body: Validator.CartPosCheckoutDetailRequest().required(),
      }).required();
    }
  
    static updateCartMeta() {
      return Joi.object({
        id: Joi.string().allow(""),
        body: Validator.CartMetaRequest().required(),
      }).required();
    }
  
    static getAvailableDeliveryModes() {
      return Joi.object({
        areaCode: Joi.string().allow("").required(),
        id: Joi.string().allow(""),
      }).required();
    }
  
    static getStoreAddressByUid() {
      return Joi.object({
        storeUid: Joi.number().required(),
      }).required();
    }
  
    static getCartShareLink() {
      return Joi.object({
        body: Validator.GetShareCartLinkRequest().required(),
      }).required();
    }
  
    static getCartSharedItems() {
      return Joi.object({
        token: Joi.string().allow("").required(),
      }).required();
    }
  
    static updateCartWithSharedItems() {
      return Joi.object({
        token: Joi.string().allow("").required(),
        action: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  class LogisticValidator {
    static getTatProduct() {
      return Joi.object({
        body: Validator.GetTatProductReqBody().required(),
      }).required();
    }
  
    static getPincodeCity() {
      return Joi.object({
        pincode: Joi.string().allow("").required(),
      }).required();
    }
  }
  
  module.exports = {
    CatalogValidator,
    CartValidator,
    CommonValidator,
    LeadValidator,
    ThemeValidator,
    UserValidator,
    ContentValidator,
    CommunicationValidator,
    ShareValidator,
    FileStorageValidator,
    ConfigurationValidator,
    PaymentValidator,
    OrderValidator,
    RewardsValidator,
    FeedbackValidator,
    PosCartValidator,
    LogisticValidator,
    Validator,
  };
  