import { body, param, query, validationResult, check, cookie } from 'express-validator'
import myError from '../api/myError'
import { every, isDate, isLength } from 'lodash'

export function isEmailValid(mail) {
  const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(mail);
}

export const isValidMobilePhone = (phone) => {
  return phone.length === 11 && (phone[0] === '0' || phone[0] === '۰') && (phone[1] === '9' || phone[1] === '۹') && (/^\d+$/.test(phone) || /^\d+$/.test(numbersFormatter( phone, 'en')))
} 

const isValidDate = (d) => {
  return d instanceof Date && !isNaN(d.getTime());
}
// A helper for converting non-persian numbers to persian ones.
let arabicNumbers = ["١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٠"],
  persianNumbers = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"],
  englishNumbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];

function searchAndReplaceInNumbers(value, source, target) {
  for (let i = 0, len = target.length; i < len; i++) {
    value = value.replace(new RegExp(source[i], "g"), target[i]);
  }
  return value;
}

export function numbersFormatter(value, to = "fa") {
  value = typeof value === "number" ? String(value) : value;
  if (!value) return value;
  let output = value;
  if (to === "fa") {
    output = searchAndReplaceInNumbers(output, englishNumbers, persianNumbers);
    output = searchAndReplaceInNumbers(output, arabicNumbers, persianNumbers);
  } else if (to === "en") {
    output = searchAndReplaceInNumbers(output, persianNumbers, englishNumbers);
    output = searchAndReplaceInNumbers(output, arabicNumbers, englishNumbers);
  }
  return output;
}
import * as mongo from 'mongodb'
const ObjectId = mongo.ObjectID
export const userValidationRules = (type, input) => {
  /// /////////////////////////////////////////
  /// //////// body  //////////////////////////
  /// /////////////////////////////////////////

/// /////////////////////////////////////////////////////////////////////////////////
  /// //////// user  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////

// ----------- SKH ----------------

  // ------- body --------

  if (type === 'body' && input === 'curGivenId') {
    return [
      body('curGivenId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenId is required!', clientMessage: 'شناسه ارز پیشنهادی مورد نیاز است!' }),
      body('curGivenId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenId is not valid!', clientMessage: 'شناسه ارز پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curGivenIdOp') {
    return [
      body('curGivenIdOp').optional().isMongoId()
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenIdOp is not valid!', clientMessage: 'شناسه ارز پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curGivenVal') {
    return [
      body('curGivenVal').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenVal is required!', clientMessage: 'مقدار ارز پیشنهادی مورد نیاز است!' }),
      body('curGivenVal').isNumeric().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenVal is not valid!', clientMessage: 'مقدار ارز پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curGivenValOp') {
    return [
      body('curGivenValOp').optional()
      .custom((v) => {
        if (!v.from && !v.to) {
          return false
        } else if (v.from && Number(v.from <= 0)) {
          return false
        } else if (v.to && Number(v.to <= 0)) {
          return false
        } else {
          return true
        }
      })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curGivenValOp is not valid!', clientMessage: 'مقدار ارز پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curTakenId') {
    return [
      body('curTakenId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenId is required!', clientMessage: 'شناسه ارز درخواستی مورد نیاز است!' }),
      body('curTakenId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenId is not valid!', clientMessage: 'شناسه ارز درخواستی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curTakenIdOp') {
    return [
      body('curTakenIdOp').optional().isMongoId()
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenIdOp is not valid!', clientMessage: 'شناسه ارز درخواستی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curTakenVal') {
    return [
      body('curTakenVal').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenVal is required!', clientMessage: 'مقدار ارز درخواستی مورد نیاز است!' }),
      body('curTakenVal').isNumeric().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenVal is not valid!', clientMessage: 'مقدار ارز درخواستی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'curTakenValOp') {
    return [
      body('curTakenValOp').optional()
      .custom((v) => {
        if (!v.from && !v.to) {
          return false
        } else if (v.from && Number(v.from <= 0)) {
          return false
        } else if (v.to && Number(v.to <= 0)) {
          return false
        } else {
          return true
        }      
      })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curTakenValOp is not valid!', clientMessage: 'مقدار ارز پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'expDate') {
    return [
      body('expDate').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'expDate is required!', clientMessage: 'تاریخ انقضای پیشنهاد مورد نیاز است!' }),
      body('expDate').isDate().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'expDate is not valid!', clientMessage: 'تاریخ انقضای پیشنهاد معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'expDateOp') {
    return [
      body('expDateOp').optional()
      .custom((v) => {
        if (!v.from && !v.to) {
          return false
        } else if (v.from && isValidDate(v.from)) {
          return false
        } else if (v.to && isValidDate(v.to)) {
          return false
        } else if (v.from > v.to) {
          return false
        } else {
          return true
        }        })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'expDateOp is not valid!', clientMessage: 'تاریخ انقضا پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'created_atOp') {
    return [
      body('created_atOp').optional()
      .custom((v) => {
        if (!v.from && !v.to) {
          return false
        } else if (v.from && isValidDate(v.from)) {
          return false
        } else if (v.to && isValidDate(v.to)) {
          return false
        } else if (v.from > v.to) {
          return false
        } else {
          return true
        }  
      })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'created_atOp is not valid!', clientMessage: 'تاریخ تولید پیشنهادی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'currency') {
    return [
      body('currency').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'currency is required!', clientMessage: 'ارز مورد نیاز است!' }),
      body('currency').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'currency is not valid!', clientMessage: 'ارز معتبر نیست!' })
           ]
  } else if (type === 'body' && input === 'quantity') {
    return [
      body('quantity').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'quantity is required!', clientMessage: 'تعداد درخواستی ارز مورد نیاز است!' }),
      body('quantity').isNumeric().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'quantity is not valid!', clientMessage: 'تعداد درخواستی ارز معتبر نیست!' })
           ]
  }  if (type === 'body' && input === 'offerIdOp') {
    return [
      body('offerIdOp').optional().isUUID()
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'offerId is not valid!', clientMessage: 'شناسه پیشنهاد معتبر نیست!' })
    ]
  }

  // ------- Query --------

  if (type === 'query' && input === 'offerId') {
    return [
      query('offerId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'offerId is required!', clientMessage: 'شناسه پیشنهاد مورد نیاز است!' }),
      query('offerId').isUUID().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'offerId is not valid!', clientMessage: 'شناسه پیشنهاد معتبر نیست!' })
    ]
  }

// --------------------------------

  // -------------------------------- /




else if((type === 'query' && input === 'currencyId')) {
  return [
    query('currencyId')
    .exists()
    .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "curreny id can not method not ", clientMessage: ' ارز نمی‌تواند خال باشد.' })
    .isMongoId()
    .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curreny id is not valid!', clientMessage: 'ارز  معتبر نیست.!' }),
    ]
  }else if (type === 'body' && input === 'name') {
    return [
      body('name')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "name cn not be empty", clientMessage: 'نام نمی تواند خالی باشد' })
      .isString()
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'name is not valid!', clientMessage: ' نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'currencyName') {
    return [
      body('currencyName')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "name cn not be empty", clientMessage: 'نام نمی تواند خالی باشد' })
      .isString()
      .custom((curName) => {
        
        return (curName === 'BITCOIN') || (curName === 'RIAL') || (curName === 'TRON' ) || (curName === 'ETHEREUM')
        
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'currency name info  is not valid!', clientMessage: ' نام معتبر نیست!' })
      
    ]
  } else if((type === 'body' && input === 'persianName')) {
    return [

      body('persianName')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "name cn not be empty", clientMessage: 'نام فارسی نمی تواند خالی باشد' })
      .isString()
      .custom((perName) => {
        return perName === 'اتریوم' || perName === 'ترون' || perName === 'بیت کوین' || perName === 'ریال'
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'persian name is not valid !', clientMessage: ' نام فارسی معتبر نیست!' }),
    ]
  }  else if((type === 'body' && input === 'abName')) {
  return [
    body('abName')
    .exists()
    .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "short name can not be empty", clientMessage: 'مخفف نمی تواند خالی باشد' })
    .isString()
    .custom((shortName) => {   
        return shortName === 'ETH' || shortName === 'BTC' || shortName === 'TRX' || shortName === 'IRR'
    })
    .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'short name is not valid!', clientMessage: ' مخفف  معتبر نیست!' }),
     ]
  } else if((type === 'body' && input === 'currencyId')) {
    return [
      body('currencyId')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "curreny id can not method not ", clientMessage: ' ارز نمی‌تواند خال باشد.' })
      .isMongoId()
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curreny id is not valid!', clientMessage: 'ارز  معتبر نیست.!' }),
      ]
  } else if((type === 'body' && input === 'currencyValue')) {
    return [
      body('currencyValue')
      .exists()
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'curreny value is not exsist!', clientMessage: ' مقدار نمی تواند خالی باشد!' })
      .isNumeric()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "currency value should be number", clientMessage: 'مقدار ارز بایذ عدد باشد' })
      .custom((v) => {
        return v >= 0
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'the value should be positive!', clientMessage: 'مقدار باید مثبت باشد' })
    
    ]
  } else if((type === 'body' && input === 'receiverUserId')) {
    return [
      body('receiverUserId')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: " receiver User Id can not be empty", clientMessage: ' شناسه گیرنده نمی تواند خالی باشد ' })
      .isMongoId()
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'receiver User Id is not valid!', clientMessage: 'شناسه گیرنده معتبر نیست' })
    ]
  } else if((type === 'body' && input === 'receiverUsername')) {
    return [
      body('receiverUsername')
      .exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: " receiver Username can not be empty", clientMessage: ' شناسه گیرنده نمی تواند خالی باشد ' })
      .custom((v) => {
        return isEmailValid(v) || isValidMobilePhone(v)
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'receiver Username is not valid!', clientMessage: 'شناسه گیرنده معتبر نیست' })
    ]
  }




























  /// /////////////////////////////////////////
  /// //////// query  //////////////////////////
  /// /////////////////////////////////////////

/// /////////////////////////////////////////////////////////////////////////////////
  /// //////// user  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////


  else if (type === 'query' && input === 'uuid') {
    return [
      query('uuid').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'uuid is required!', clientMessage: 'شناسه منحصربفرد پیشنهاد مورد نیاز است!' }),
      query('uuid').isUUID().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'uuid is not valid!', clientMessage: 'شناسه منحصربفرد پیشنهاد معتبر نیست!' })
           ]
  }



















  else if (type === 'body' && input === 'title') {
    return [
      body('title').optional().isString().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'title is not valid!', clientMessage: 'تیتر معتبر نیست!' }),
       ]
  }
  else if (type === 'body' && input === 'body') {
    return [
      body('body').exists().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'body is not present!', clientMessage: 'بدنه نظر موجود نیست!' }),
      body('body').isString().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'body is not valid!', clientMessage: 'بدنه معتبر نیست!' }),

       ]
  }
  else if (type === 'body' && input === 'rate') {
    return [
      body('rate').optional().isNumeric().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'rate is not valid!', clientMessage: 'امتیاز معتبر نیست!' }),
     
       ]
  }
  
  else if (type === 'body' && input === 'titleOp') {
    return [
      body('titleOp').optional().isString().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'title is not valid!', clientMessage: 'تیتر معتبر نیست!' }),
       ]
  }
  else if (type === 'body' && input === 'bodyOp') {
    return [
      body('bodyOp').optional().isString().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'body is not valid!', clientMessage: 'بدنه نظر معتبر نیست!' }),

       ]
  }
  else if (type === 'body' && input === 'rateOp') {
    return [
      body('rateOp').optional().isNumeric().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'rate is not valid!', clientMessage: 'امتیاز معتبر نیست!' }),
     
       ]
  }
  else if (type === 'body' && input === 'reviewId') {
    return [
      body('reviewId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is required!', clientMessage: 'شناسه نظر مورد نیاز است!' }),
      body('reviewId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is not valid!', clientMessage: 'شناسه نظر معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'question') {
    return [
      body('question').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'question is required!', clientMessage: 'سوال مورد نیاز است!' }),
      body('question').isString().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'question is not valid!', clientMessage: 'سوال صحیح معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'profileName') {
    return [
      body('profileName').optional().isString().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'profileName is not valid!', clientMessage: 'نام معتبر نیست!' }),
    ]
  }

  else if (type === 'body' && input === 'profileLastName') {
    return [
      body('profileLastName').optional().exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'profileLastName is required!', clientMessage: 'نام خانوادگی معتبر نیست!' }),
    //  body('question').isString().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'question is not valid!', clientMessage: 'سوال صحیح معتبر نیست!' })
    ]
  }

  else if (type === 'body' && input === 'profileBirthdate') {
    console.log(body('profileBirthdate'))
    return [
      body('profileBirthdate').optional()
      .custom((v) => {
        return v.year && v.month && v.day
      })
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'profileBirthdate is required!', clientMessage: 'سن مورد نیاز است' }),
    ]
  }

  else if (type === 'body' && input === 'profilePhoneNumber') {
    return [
      body('profilePhoneNumber').optional().isString().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'profilePhoneNumber is required!', clientMessage: 'شماره تلفن مورد نیاز است!' }),
    ]
  }

  else if (type === 'body' && input === 'question') {
    return [
      body('question').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'question is required!', clientMessage: 'سوال مورد نیاز است!' }),
      body('question').isString().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'question is not valid!', clientMessage: 'سوال صحیح معتبر نیست!' })
    ]
  }






















  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// service  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'body' && input === 'productId') {
    return [
      body('productId').exists().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is required!', clientMessage: 'شناسه محصول مورد نیاز است!' }),
      body('productId').isHexadecimal().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' }),
      body('productId').isMongoId().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'quantity') {
    return [
      body('quantity').exists().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Quantity is required!', clientMessage: 'تعداد محصول مورد نیاز است!' }),
      body('quantity').isInt({ min: 1 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Quantity is not valid!', clientMessage: 'تعداد محصول معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'isExisted') {
    return [
      body('isExisted').optional().isBoolean().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'isExisted is not valid!', clientMessage: 'شناسه وجود معتبر نیست!' }),
    ]
  }
  else if (type === 'body' && input === 'rate') {
    return [
      body('rate').optional().isInt({ min: 1, max: 5 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Rate is not valid!', clientMessage: 'شناسه امتیازدهی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productRate') {
    return [
      body('productRate').optional().isInt({ min: 1, max: 5 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productRate is not valid!', clientMessage: 'شناسه امتیازدهی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'brands') {
    return [
      body('brands').optional().isArray({ min: 1 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'brands is not valid!', clientMessage: 'شناسه برند معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'categoryBrands') {
    return [
      body('categoryBrands').optional().isArray({ min: 1 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryBrands is not valid!', clientMessage: 'شناسه برند معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'priceObject') {
    return [
      body('priceObject').optional().custom((value) => { return (value.from >= 0 && value.to) }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'priceObject are not valid!', clientMessage: 'مقادیر معتبر نیستند!' }),
      body('priceObject').optional().custom((value) => { return value.from < value.to }).withMessage({ clientCode: 128, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'priceObject are not valid!', clientMessage: 'مقادیر معتبر نیستند!' }),
      body('priceObject.from').optional().isInt({ min: 0 }).withMessage({ clientCode: 101, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'priceObject are not valid!', clientMessage: 'مقادیر معتبر نیستند!' }),
      body('priceObject.to').optional().isInt({ min: 0 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'priceObject are not valid!', clientMessage: 'مقادیر معتبر نیستند!' }),
    ]
  } else if (type === 'body' && input === 'offPercentOp') {
    return [
      body('offPercentOp').optional().isInt({ min: 1 }).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'OffPercent is not valid!', clientMessage: 'شناسه تخفیف معتبر نیست!' })
    ]
  } 
  else if (type === 'body' && input === 'offPercent') {
    return [
   
      body('offPercent').exists().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'OffPercent is not present!', clientMessage: 'شناسه تخفیف لازم است!' }),
      body('offPercent').isInt({min : 1}).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'OffPercent is not valid!', clientMessage: 'شناسه تخفیف معتبر نیست!' })
   
    ]
  } 
  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// auth  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'body' && input === 'email') {
    return [
      body('email').exists().withMessage({ clientCode: 7, statusCode: 422, messageEnglish: 'Email and Password are required!', clientMessage: 'ایمیل و گذرواژه مورد نیاز است!' }),
      body('email').isEmail().withMessage({ clientCode: 8, statusCode: 422, messageEnglish: 'Email or Password are not valid!', clientMessage: 'ایمیل یا گذرواژه معتبر نیست' })
    ]
  } else if (type === 'body' && input === 'password') {
    return [
      body('password').exists().withMessage({ clientCode: 7, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Email and Password are required!', clientMessage: 'ایمیل و گذرواژه مورد نیاز است!' }),
      body('password').isString().isLength({ min: 6 }).withMessage({ clientCode: 8, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Email or Password are not valid!', clientMessage: 'ایمیل یا گذرواژه معتبر نیست!' })

    ]
  }
  else if (type === 'body' && input === 'newPassword') {
    return [
      body('newPassword').exists().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Passwords are required!', clientMessage: 'گذرواژه ها مورد نیاز است!' }),
      body('newPassword').isString().isLength({ min: 6 }).withMessage({ clientCode: 80, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'New password is not strong!', clientMessage: 'گذرواژه به اندازه کافی قوی انتخاب نشده است!' })
    ]
  }
   else if (type === 'body' && input === 'passwordConfirm') {
    return [
      body('passwordConfirm').exists().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Passwords are required!', clientMessage: 'گذرواژه ها مورد نیاز است!' }),
      body('passwordConfirm').isString().isLength({ min: 6 }).withMessage({ clientCode: 80, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'New password is not strong!', clientMessage: 'گذرواژه به اندازه کافی قوی انتخاب نشده است!' })
    ]
  } else if (type === 'body' && input === 'name') {
    return [
      body('name').exists().withMessage({ clientCode: 76, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Name is required!', clientMessage: 'نام مورد نیاز است!' }),
      body('name').isString().isLength({ min: 1 }).withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Name is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'lastName') {
    return [
      body('lastName').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'LastName is required!', clientMessage: 'نام خانوادگی مورد نیاز است!' }),
      body('lastName').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'LastName is not valid!', clientMessage: 'نام خانوادگی معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'phoneNumber') {
    return [
      body('phoneNumber').optional()
  .isString()
  .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phoneNumber", clientMessage: '  شماره تلفن ورودی معتبر نیست!' })
  .isLength({ min: 8, max: 11 })
  .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phoneNumber", clientMessage: ' آشماره تلفن ورودی معتبر نیست!' }),
  ]
  }
 
  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// admin  ///////////////////////////////////////////////////////////////
  /// //////////////////////////////////////////////////////////////////////////////z
  else if (type === 'body' && input === 'orderOrderStatus') {
    return [
      // body('orderOrderStatus').optional().custom((v) => { return (v.status) })
      //   .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'orderOrderStatus is required!', clientMessage: ' حالت ورودی سفارش معتبر نیست!' }),
      // body('orderOrderStatus').optional()
      //   .custom((v) => { return Object.keys(v).every((i) => { return ['status', 'date'].includes(i) }) })
      //   .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderStatus is not valid!", clientMessage: ' حالت ورودی سفارش معتبر نیست!' }),
      body('orderOrderStatus').optional().equals('Canceled')
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderStatus is not valid!", clientMessage: ' حالت ورودی سفارش معتبر نیست!' }),
      // body('orderOrderStatus.status').optional().isIn(['Pending', 'Successful', 'Failed', 'Canceled', 'Edited'])
      //   .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderStatus's fields are not valid!", clientMessage: ' حالت ورودی سفارش معتبر نیست!' }),
      // body('orderOrderStatus.date').optional().custom(isDate)
      //   .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderStatus's fields are not valid!", clientMessage: ' حالت ورودی سفارش معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'orderAddress') {
    return [
      body('orderAddress').optional()
        .custom((v) => { return (v.phone || v.mobilePhone || v.city || v.address || v.province || v.postalCode) })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress')
        .optional()
        .custom((v) => {
          return Object.keys(v)
            .every((i) => { return ['phone', 'mobilePhone', 'city', 'address', 'province', 'postalCode'].includes(i) })
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.phone').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 8, max: 11 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.mobilePhone').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 10, max: 11 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.city').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 2, max: 20 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.address').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 1, max: 100 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.province').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 2, max: 20 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
      body('orderAddress.postalCode').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' })
        .isLength({ min: 10, max: 10 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderAddress's fields are not valid!", clientMessage: ' آدرس ورودی سفارش معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'orderDelivery') {
    return [
      body('orderDelivery').optional().custom((v) => { return (v.status || v.date || v.code) })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' }),
      body('orderDelivery').optional()
        .custom((v) => {
          return Object.keys(v)
            .every((i) => { return ['status', 'date', 'code'].includes(i) })
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' }),
      body('orderDelivery.status').optional().isIn(['Sent', 'Received', 'Failed','Unknown'])
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' }),
      body('orderDelivery.code').optional()
        .isString()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' })
        .isLength({ min: 1, max: 15 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' }),
      body('orderDelivery.price').optional().isInt({ min: 0 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' }),
      body('orderDelivery.date').optional().custom((v)=>{
        let date =  new Date(v).getTime();
        return date < new Date().getTime()
      })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderDelivery's fields are not valid!", clientMessage: 'وضعیت ارسال ورودی سفارش معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'orderOrderId') {
    return [
      body('orderOrderId').exists()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' }),

       body('orderOrderId') .custom((v) => {
        return (v.toString().indexOf(".1") > -1||(v.toString().indexOf(".2")> -1))
      
          }
      )
         .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'orderItems') {
    return [
      body('orderItems').optional()
        .custom((v) => {
          let existanceArray = []
          return v.every((f) => {
            if (existanceArray.includes(f.product.toString())) {
              return false
            }
            existanceArray.push(f.product.toString())
            return Object.keys(f).every((i) => {
              if (i == 'product') { return ObjectId.isValid(f.product) }
              else if (i == 'quantity') { return (Number.isInteger(Number(f.quantity)) && Number(f.quantity) >= 0) }
              else { return false }
            }
            )
          })
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderItems's fields are not valid!", clientMessage: 'تعداد ورودی سفارش معتبر نیست!' })
    ]
  }

  else if (type === 'body' && input === 'province') {
    return [
      body('province').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Province is required!', clientMessage: 'نام استان مورد نیاز است!' }),
      body('province').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Province is not valid!', clientMessage: 'نام استان معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'title') {
    return [
      body('title').optional().isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'title is not valid!', clientMessage: 'عنوان آدرس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'district') {
    return [
      body('district').optional().isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'district is not valid!', clientMessage: 'منطقه شهری آدرس معتبر نیست!' }),
      body('district').optional().isIn([
      'منطقه ۱۱', 'منطقه ۱۰', 'منطقه ۹' ,'منطقه ۸','منطقه ۷','منطقه ۶','منطقه ۵','منطقه ۴','منطقه ۳','منطقه ۲','منطقه ۱',
      'منطقه ۲۲','منطقه ۲۱','منطقه ۲۰','منطقه ۱۹','منطقه ۱۸','منطقه ۱۷','منطقه ۱۶','منطقه ۱۵','منطقه ۱۴','منطقه ۱۳','منطقه ۱۲'
    ])
    .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'district is not valid!', clientMessage: 'منطقه شهری آدرس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'city') {
    return [
      body('city').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'City is required!', clientMessage: 'نام شهر مورد نیاز است!' }),
      body('city').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'City is not valid!', clientMessage: 'نام شهر معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'address') {
    return [
      body('address').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Address is required!', clientMessage: 'آدرس مورد نیاز است!' }),
      body('address').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Address is not valid!', clientMessage: 'آدرس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'postalCode') {
    return [
      body('postalCode').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PostalCode is required!', clientMessage: 'کد پستی مورد نیاز است!' }),
      body('postalCode')
      .custom((v) => {
        return v && v.length === 10 && (/^\d+$/.test(v) || /^\d+$/.test(numbersFormatter( v, 'en')))
      })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PostalCode is not valid!', clientMessage: 'کد پستی معتبر نیست!' })
    
    ]
  }
  
  else if (type === 'body' && input === 'phone') {
    return [
      body('phone').optional()
      .isString()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phone's is not valid!", clientMessage: 'شماره تلفن معتبر نیست!' }),
      body('phone').optional()
      .isLength({ min: 5, max: 11 })
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phone's is not valid!", clientMessage: 'شماره تلفن معتبر نیست!' }),
    ]
  }
  else if (type === 'body' && input === 'mobilePhone') {
    return [
      body('mobilePhone').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "MobilePhone's is not valid!", clientMessage: 'شماره موبایل معتبر نیست!' }),
      body('mobilePhone')
        .custom((v) => {
          return  v.length === 11 && (v[0] == '0' || v[0] == '۰') && (v[1] == '9' || v[1] == '۹') && (/^\d+$/.test(v) || /^\d+$/.test(numbersFormatter( v, 'en')))
        })
        .isLength({ min: 10, max: 11 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "MobilePhone's is not valid!", clientMessage: 'شماره موبایل معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'addressId') {
    return [
      body('addressId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'AddressId Code is required!', clientMessage: 'شناسه آدرس مورد نیاز است!' }),
      body('addressId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'AddressId Code is not valid!', clientMessage: 'شناسه آدرس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'paymentMethod') {
    return [
      body('paymentMethod').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PaymentMethod Code is required!', clientMessage: 'نحوه پرداخت مورد نیاز است!' }),
      body('paymentMethod').isIn(['Cash', 'Online', 'FireBox', 'ChargeCapsule']).withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PaymentMethod Code is not valid!', clientMessage: 'نحوه پرداخت معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'offCodeId') {
    return [
      body('offCodeId').optional().isString().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'OffCodeId Code is required!', clientMessage: 'نام کد مورد معتبر نیست!' }),
      body('offCodeId').optional().isLength({ min: 1 }).withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'OffCodeId Code is not valid!', clientMessage: 'نام کد معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'filterQuantity') {
    return [
      body('filterQuantity').optional()
      .custom((v) => {
        return v.from && v.to && typeof(Number(v.from)) === 'number' && typeof(Number(v.to)) === 'number' && v.from < v.to
      })
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'filterQuantity Code is required!', clientMessage: 'فیلتر تعداد معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'filterCategory') {
    return [
      body('filterCategory').optional()
      .isString()
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'filterCategory Code is required!', clientMessage: 'فیلتر دسته بندی معتبر نیست!' }),
      body('filterCategory').optional()
      .isLength({ min: 1 })
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'filterCategory Code is required!', clientMessage: 'فیلتر دسته بندی معتبر نیست!' }),
    ]
  }
  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// admin  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'body' && input === 'reviewIds') {
    return [
      body('reviewIds').isArray({ min: 1 })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is not valid!', clientMessage: 'شناسه نظر معتبر نیست!' }),
      body('reviewIds')
        .custom((r) => {
          r.every((i) => {
            return i.isMongoId()
          })
        })
        .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is not valid!', clientMessage: 'شناسه نظر معتبر نیست!' })
    ]
  }  else if (type === 'body' && input === 'qAndAs') {
    return [
      body('qAndAs').isArray({ min: 1 })
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'QAndAs Code are not valid!', clientMessage: 'شناسه های سوالات معتبر نیستند!' }),
      body('qAndAs')
        .custom((r) => {
          r.every((i) => {
            return i.isMongoId()
          })
        })
        .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'QAndAs Code are not valid!', clientMessage: 'شناسه های سوالات معتبر نیستند!' })
    ]
  }
  else if (type === 'body' && input === 'englishName') {
    return [
      body('englishName').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'englishName is required!', clientMessage: 'نام انگلیسی مورد نیاز است!' }),
      body('englishName').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'englishName is not valid!', clientMessage: 'نام انگلیسی معتبر نیست!' }),
      body('englishName').isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'englishName is not valid!', clientMessage: 'نام انگلیسی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productEnglishName') {
    return [
      body('productEnglishName').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productEnglishName is not valid!', clientMessage: 'نام انگلیسی معتبر نیست!' }),
      body('productEnglishName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productEnglishName is not valid!', clientMessage: 'نام انگلیسی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'tags') {
    return [
      body('tags').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Tags is required!', clientMessage: 'تگ مورد نیاز است!' }),
      body('tags').isArray({ min: 1, max: 10 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Tags is not valid!', clientMessage: 'تگ معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'tagsOp') {
    return [
      body('tagsOp')
      .optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'TagsOp is not valid!', clientMessage: 'تگ معتبر نیست!' }),
      body('tagsOp')
      .optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'TagsOp is not valid!', clientMessage: 'تگ معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productTags') {
    return [
      body('productTags').optional().isArray({ min: 1, max: 10 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productTags is not valid!', clientMessage: 'تگ معتبر نیست!' }),
      body('productTags').optional().custom((v) => { return v.every((i) => { return typeof i === 'string' }) })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productTags is not valid!', clientMessage: 'تگ معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'brand') {
    return [
      body('brand').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'brand is required!', clientMessage: 'نام برند مورد نیاز است!' }),
      body('brand').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'brand is not valid!', clientMessage: 'نام برند معتبر نیست!' }),
      body('brand').isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'brand is not valid!', clientMessage: 'نام برند معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productBrand') {
    return [
      body('productBrand').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productBrand is not valid!', clientMessage: 'نام برند معتبر نیست!' }),
      body('productBrand').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productBrand is not valid!', clientMessage: 'نام برند معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productCode') {
    return [
      body('productCode').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCode is required!', clientMessage: 'کد محصول مورد نیاز است!' }),
      body('productCode').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCode is not valid!', clientMessage: 'کد محصول معتبر نیست!' }),
      body('productCode').isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCode is not valid!', clientMessage: 'کد محصول معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'subCategory') {
    return [
      body('subCategory').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'subCategory is required!', clientMessage: 'زیر دسته بندی مورد نیاز است!' }),
      body('subCategory').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'subCategory is not valid!', clientMessage: 'زیر دسته بندی معتبر نیست!' }),
      body('subCategory').isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'subCategory is not valid!', clientMessage: 'زیر دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productProductCode') {
    return [
      body('productProductCode').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productProductCode is not valid!', clientMessage: 'کد محصول معتبر نیست!' }),
      body('productProductCode').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productProductCode is not valid!', clientMessage: 'کد محصول معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'categoryCode') {
    return [
      body('categoryCode').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCode is required!', clientMessage: 'کد دسته بندی مورد نیاز است!' }),
      body('categoryCode').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productCategoryCode') {
    return [
      body('productCategoryCode').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCategoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' }),
      body('productCategoryCode').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCategoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'categoryCategoryCode') {
    return [
      body('categoryCategoryCode').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCategoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' }),
      body('categoryCategoryCode').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCategoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'categoryId') {
    return [
      body('categoryId').optional().isHexadecimal()
      .withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CategoryId is not valid!', clientMessage: 'شناسه دسته بندی معتبر نیست!' }),
      body('categoryId').optional().isMongoId()
      .withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CategoryId is not valid!', clientMessage: 'شناسه دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'image') {
    return [
      body('image').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'image is required!', clientMessage: 'آدرس عکس مورد نیاز است!' }),
      body('image').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'image is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('image').isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'image is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('image').custom((v) => { return v.split('.').length === 2 && ObjectId.isValid(v.split('.')[0]) })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'image is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productImage') {
    return [
      body('productImage').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('productImage').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('productImage').optional().custom((v) => { return v.split('.').length === 2 && ObjectId.isValid(v.split('.')[0]) })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' })    
    ]
  } else if (type === 'body' && input === 'categoryImage') {
    return [
      body('categoryImage').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('categoryImage').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('categoryImage').optional().custom((v) => { return v.split('.').length === 2 && ObjectId.isValid(v.split('.')[0]) })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryImage is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' })        
    ]
  } else if (type === 'body' && input === 'categoryDescription') {
    return [
      body('categoryDescription').optional().isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryDescription is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' }),
      body('categoryDescription').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryDescription is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'cardGallery') {
    return [
      body('cardGallery').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'cardGallery is required!', clientMessage: 'آدرس گالری مورد نیاز است!' }),
      body('cardGallery').isArray({ min: 1, max: 3 })
      .withMessage({ clientCode: 80, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'cardGallery is not valid!', clientMessage: 'آدرس گالری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productCardGallery') {
    return [
      body('productCardGallery').optional().isArray({ min: 1, max: 3 })
      .withMessage({ clientCode: 80, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCardGallery is not valid!', clientMessage: 'آدرس گالری معتبر نیست!' }),
      body('productCardGallery').optional().custom((v) => { return every((i) => { return i.split('.').length === 2 && ObjectId.isValid(i.split('.')[0]) }) })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCardGallery is not valid!', clientMessage: 'آدرس عکس معتبر نیست!' })        
    ]
  } else if (type === 'body' && input === 'price') {
    return [
      body('price').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'price required!', clientMessage: 'قیمت مورد نیاز است!' }),
      body('price').isInt({ min: 1 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'price are not valid!', clientMessage: 'قیمت معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'newPrice') {
    return [
      body('newPrice').optional().isInt({ min: 1 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'newPrice are not valid!', clientMessage: 'قیمت جدید معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productPrice') {
    return [
      body('productPrice').optional().isInt({ min: 1 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productPrice are not valid!', clientMessage: 'قیمت معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productNewPrice') {
    return [
      body('productNewPrice').optional().isInt({ min: 1 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productNewPrice are not valid!', clientMessage: 'قیمت جدید معتبر نیست!' })
    ]
  }  else if (type === 'body' && input === 'description') {
    return [
      body('description').optional().isString().isLength({ min: 1, max: 1000 }).withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Body are not valid!', clientMessage: 'توضیح بیشتر معتبر نیست!' }),
      body('gallery').optional().isArray({ min: 1, max: 20 }).withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Gallery are not valid!', clientMessage: 'گالری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productDescription') {
    return [
      body('productDescription').optional()
      .isString()
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Body are not valid!', clientMessage: 'توضیح بیشتر معتبر نیست!' })
      .isLength({ max: 1000 })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Body are not valid!', clientMessage: 'توضیح بیشتر معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'productGallery') {
    return [
      body('productGallery').optional().isArray({ max: 20 })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Gallery are not valid!', clientMessage: 'گالری معتبر نیست!' })
    ]
  }
  
  else if (type === 'body' && input === 'cardProperties') {
    return [
      body('cardProperties').optional().isArray({ max: 10 })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CardProperties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' }),
      body('cardProperties')
      .optional()
      .custom((v) => {
        return v.every((i) => { return i.key && typeof i.key === 'string' && i.value && typeof i.value === 'string' })
      })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CardProperties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'properties') {
    return [
      body('properties').optional().isArray({ max: 10 })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Properties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' }),
      body('properties')
      .optional()
      .custom((v) => {
        return v.every((i) => {
          i.title && i.content && Array.isArray(i.content) && i.content.length > 0 
          // return i.content.every((j) => { return j.key && typeof j.key === 'string' && j.value && typeof j.value === 'string' })
        })
      })
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Properties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'accessLevels') {
    return [
      body('accessLevels').optional().notEmpty().withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'AccessLevels are not valid!', clientMessage: 'سطوح دسترسی معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'productCardProperties') {
    return [
      body('productCardProperties').optional().isArray({ min: 1 }).withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCardProperties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'productProperties') {
    return [
      body('productProperties').optional().isArray({ min: 1 }).withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productProperties are not valid!', clientMessage: 'ویژگی های کارت معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'productAccessLevels') {
    return [
      body('productAccessLevels').optional().notEmpty()
      .withMessage({ clientCode: 15, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productAccessLevels are not valid!', clientMessage: 'سطوح دسترسی معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'commercialhName') {
    return [
      body('commercialhName').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CommercialhName is required!', clientMessage: 'نام تجاری مورد نیاز است!' }),
      body('commercialhName').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CommercialhName is not valid!', clientMessage: 'نام تجاری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'searchItems') {
    return [
      body('searchItems').optional().isArray({ min: 1, max: 7 }).withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'searchItems is not valid!', clientMessage: 'آیتم های جستجو معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'categorySearchItems') {
    return [
      body('categorySearchItems').optional().isArray({ min: 1, max: 7 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categorySearchItems is not valid!', clientMessage: 'آیتم های جستجو معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === '_id') {
    return [
      body('_id').exists()
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: '_id is required!', clientMessage: 'شناسه  مورد نیاز است!' }),
      body('_id').isHexadecimal()
      .withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: '_id is not valid!', clientMessage: 'شناسه  معتبر نیست!' }),
      body('_id').isMongoId()
      .withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: '_id is not valid!', clientMessage: 'شناسه  معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'managerName') {
    return [
      body('managerName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerName is not valid!', clientMessage: 'نام معتبر نیست!' }),
      body('managerName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerName is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'managerLastName') {
    return [
      body('managerLastName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerLastName is not valid!', clientMessage: 'نام معتبر نیست!' }),
      body('managerLastName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerLastName is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'managerEmail') {
    return [
      body('managerEmail').optional().isEmail()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerEmail is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'managerIsActive') {
    return [
      body('managerIsActive').optional().isBoolean()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerIsActive is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'managerRole') {
    return [
      body('managerRole').optional().isIn(['Supporter', 'Manager', 'Deliveryman'])
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'managerRole is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'supporterName') {
    return [
      body('supporterName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterName is not valid!', clientMessage: 'نام معتبر نیست!' }),
      body('supporterName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterName is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'supporterLastName') {
    return [
      body('supporterLastName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterLastName is not valid!', clientMessage: 'نام معتبر نیست!' }),
      body('supporterLastName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterLastName is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'supporterEmail') {
    return [
      body('supporterEmail').optional().isEmail()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterEmail is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'supporterIsActive') {
    return [
      body('supporterIsActive').optional().isBoolean()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterIsActive is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'supporterRole') {
    return [
      body('supporterRole').optional().isIn(['Supporter', 'Manager', 'Deliveryman'])
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'supporterRole is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'deliverymanName') {
    return [
      body('deliverymanName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanName is not valid!', clientMessage: 'نام معتبر نیست!' }),
      body('deliverymanName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanName is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'deliverymanLastName') {
    return [
      body('deliverymanLastName').optional().isString()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanLastName is not valid!', clientMessage: 'نام خانوادگی معتبر نیست!' }),
      body('deliverymanLastName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanLastName is not valid!', clientMessage: 'نام خانوادگی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'deliverymanEmail') {
    return [
      body('deliverymanEmail').optional().isEmail()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanEmail is not valid!', clientMessage: 'نام کاربری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'deliverymanIsActive') {
    return [
      body('deliverymanIsActive').optional().isBoolean()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanIsActive is not valid!', clientMessage: 'مجوز فعالیت معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'deliverymanRole') {
    return [
      body('deliverymanRole').optional().isIn(['Supporter', 'Manager', 'Deliveryman'])
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliverymanRole is not valid!', clientMessage: 'نقش معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'userIsActive') {
    return [
      body('userIsActive').optional().isBoolean()
      .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'userIsActive is not valid!', clientMessage: 'نام معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'userUserType') {
    return [
      body('userUserType').optional().isIn(['Normal', 'Builder', 'Vip'])
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'userUserType is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' })
    ]
  }
  else if (type === 'body' && input === 'isActive') {
    return [
      body('isActive').exists()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'IsActive is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' }),
      body('isActive').isBoolean()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'IsActive is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' })
    ]
  }
  else if (type === 'body' && input === 'role') {
    return [
      body('role').exists()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Role is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' }),
      body('role').isIn(['Supporter', 'Manager'])
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Role is not valid!', clientMessage: 'ورودی های ویرایش محصول معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'quantity') {
    return [
      body('quantity').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Quantity is required!', clientMessage: 'تعداد مورد نیاز است!' }),
      body('quantity').isInt({ min: 0 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Quantity are not valid!', clientMessage: 'تعداد معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'regionNum') {
    return [
      body('regionNum').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'RegionNum is required!', clientMessage: 'شماره منطقه مورد نیاز است!' }),
      body('regionNum').isInt({ min: 0, max: 22 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'RegionNum are not valid!', clientMessage: 'شماره منطقه معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'shippingPrice') {
    return [
      body('shippingPrice').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ShippingPrice is required!', clientMessage: 'قیمت ارسال مورد نیاز است!' }),
      body('shippingPrice').isInt({ min: 0 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ShippingPrice are not valid!', clientMessage: 'قیمت ارسال معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'userId') {
    return [
      body('userId').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'UserId is required!', clientMessage: 'شناسه  مورد نیاز است!' }),
    ]
  } else if (type === 'body' && input === 'id') {
    return [
      body('id').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      body('id').isUUID().withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  }
  //what was this?
  //  else if (type === 'body' && input === 'c') {
  //   return [
  //     body('id').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
  //     body('id').isUUID().withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
  //   ]
  // }
  else if (type === 'body' && input === 'verificationCode') {
    return [
      body('verificationCode').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      body('verificationCode').isString().isLength({ min: 4, max: 4 }).withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'answer') {
    return [
      body('answer').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      body('answer').isString().isLength({ min: 1, max: 200 }).withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'questionId') {
    return [
      body('questionId').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      body('questionId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'username') {
    return [
      body('username').exists().withMessage({ clientCode: 11, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Username address is required!', clientMessage: 'نام کاربری مورد نیاز است!' }),
      body('username')
      .custom((v) => {
        return isEmailValid(v) || isValidMobilePhone(v)
      })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Username address is not valid!', clientMessage: 'نام کاربری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'queries') {
    return [
      body('queries').exists().withMessage({ clientCode: 38, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Queries are required!', clientMessage: 'جستجوها مورد نیاز است!' }),
      body('queries').isArray({ min: 1 }).withMessage({ clientCode: 38, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Queries are not valid!', clientMessage: 'جستجوها معتبر نیستند!' })
    ]
  } else if (type === 'body' && input === 'commercialName') {
    return [
      body('commercialName').exists()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'commercialName required!', clientMessage: 'نام تجاری مورد نیاز است!' }),
      body('commercialName').isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'commercialName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'categoryName') {
    return [
      body('categoryName').optional().isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' }),
      body('categoryName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' })

    ]
  } else if (type === 'body' && input === 'productName') {
    return [
      body('productName').optional().isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' }),
      body('productName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'categoryCommercialName') {
    return [
      body('categoryCommercialName').optional().isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCommercialName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' }),
      body('categoryCommercialName').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCommercialName are not valid!', clientMessage: 'نام تجاری معتبر نیست!' })

    ]
  } else if (type === 'body' && input === 'code') {
    return [
      body('code').exists()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف مورد نیاز است!' }),
      body('code').isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' }),
      body('code').isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' })

    ]
  } else if (type === 'body' && input === 'type') {
    return [
      body('type').exists()
      .withMessage({ clientCode: 52, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Type is required!', clientMessage: 'نوع مورد نیاز است!' }),
      body('type').isIn(['ALL_ALL', 'ALL_CATEGORY', 'ALL_PRODUCT', 'ONE_ALL', 'ONE_CATEGORY', 'ONE_PRODUCT'])
      .withMessage({ clientCode: 53, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Type is not valid!', clientMessage: 'نوع معتبر نیست!' }),
    ]
  } else if (type === 'body' && input === 'usernameOp') {
    return [
      body('usernameOp').optional()
      .custom((v) => {
        return isEmailValid(v) || isValidMobilePhone(v)
      })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'UsernameOp is not valid!', clientMessage: 'آدرس ایمیل معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'minPrice') {
    return [
      body('minPrice').optional().isInt({ min: 1 })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'minPrice is not valid!', clientMessage: 'حداقل میزان خرید معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'maxOff') {
    return [
      body('maxOff').optional().isInt({ min: 1 })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'maxOff is not valid!', clientMessage: 'حداکثر تخفیف روی یک آیتم معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'maxTotalOff') {
    return [
      body('maxTotalOff').optional().isInt({ min: 1 })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'maxTotalOff is not valid!', clientMessage: 'حداکثر تخفیف در یک خرید معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'offPercent') {
    return [
      body('offPercent').exists()
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'offPercent is not valid!', clientMessage: 'درصد تخفیف مورد نیاز است!' }),
      body('offPercent').isInt({ min: 1 })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'offPercent is not valid!', clientMessage: 'درصد تخفیف معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'quantityOp') {
    return [
      body('quantityOp').optional().isInt({ min: 1 })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'quantity is not valid!', clientMessage: 'تعداد مجاز استفاده از کد تخفیف معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'expiredDate') {
    return [
      body('expiredDate').exists()
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'expiredDate is not valid!', clientMessage: 'تاریخ انقضا مورد نیاز است!' }),
      body('expiredDate').custom((v)=>{
        
        let date =  new Date(v).getTime();
        console.log('date is ' , date, 'and the diffrence is ' , new Date().getTime()-date )
        return date > new Date().getTime()
      })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'expiredDate is not valid!', clientMessage: 'تاریخ انقضا معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'codeOp') {
    return [
      body('codeOp').optional().isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' }),
      body('codeOP').optional().isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' })

    ]
  } else if (type === 'body' && input === 'date') {
    return [
      body('date').optional().custom(v => { return (v.from && v.from === v.from.getTime()) || (v.to && v.to === v.from.getTime()) })
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Date is not valid!', clientMessage: 'تاریخ انقضا معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'isValid') {
    return [
      body('isValid').optional().isBoolean()
      .withMessage({ clientCode: 12, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'isValid is not valid!', clientMessage: 'پرچم نمایش تمام کدها معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'orderId') {
    return [
      body('orderId').exists().isFloat()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not present!", clientMessage: 'شناسه ورودی سفارش موجود نیست!' }),
       body('orderId') 
       .custom((v) => {
        return ['1', '2', '3', '4'].includes(v.toString().split('.')[1])
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' })   
    ]
  }
  else if (type === 'body' && input === 'paymentMethodOp') {
    return [
      body('paymentMethodOp').optional().isString().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PaymentMethod Code is not valid!', clientMessage: 'نحوه پرداخت معتبر نیست!' }),
      body('paymentMethodOp').optional().isIn(['Cash', 'Online']).withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'PaymentMethod Code is not valid!', clientMessage: 'نحوه پرداخت معتبر نیست!' })
    ]
  } else if (type === 'body' && input === 'deliveryStatusOp') {
    return [
      body('deliveryStatusOp').optional().isString()
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliver status is not valid!', clientMessage: 'وضعیت ارسال معتبر نیست' }),
      body('deliveryStatusOp').optional().isIn(['Sent', 'Received', 'Failed','Unknown'])
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliver status is not valid!', clientMessage: 'وضعیت ارسال معتبر نیست' }),
    ]
  } else if (type === 'body' && input === 'deliveryStatus') {
    return [
      body('deliveryStatus').exists()
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliver status is not valid!', clientMessage: 'وضعیت ارسال معتبر نیست' }),
      body('deliveryStatus').isIn(['Sent', 'Received', 'Failed','Unknown'])
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'deliver status is not valid!', clientMessage: 'وضعیت ارسال معتبر نیست' }),
    ]
  } else if (type === 'body' && input === 'usernameOp') {
    return [
      body('usernameOp').optional().isEmail()
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'username is not valid!', clientMessage: 'وضعیت یوزرنیم ارسالی معتبر نیست' }),
         ]
  }
  else if (type === 'body' && input === 'orderStatusOp') {
    return [
      body('orderStatusOp').optional().isString()
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'order status is not valid!', clientMessage: 'وضعیت سفارش معتبر نیست' }),
      body('orderStatusOp').optional().isIn(['Successful', 'Failed', 'Reverted','Canceled','Pending','Edited'])
      .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'order status is not valid!', clientMessage: 'وضعیت سفارش معتبر نیست' }),
    ]
  }
  else if (type === 'body' && input=== 'dateOp'){
      return [

        // body('dateOp').optional()
        // .custom((v) => {
          
          //   return Object.keys(v).length ===2})
          // .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'date object is not valid!', clientMessage: 'وضعیت تاریخ های ورودی معتبر نیست' }),
                 body('dateOp').optional()
          .custom((v) => {
            let from =  new Date(v.from).getTime();
            let to =  new Date(v.to).getTime();
            if ( to > from){
            return true}
            else return false 
          }) .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'date object is not valid!', clientMessage: 'وضعیت تاریخ های ورودی معتبر نیست' }),
      ]

  }
  else if (type === 'body' && input=== 'priceOp'){
    return [
        body('priceOp').optional()
        .custom((v) => {
            return Object.keys(v)
          .every((i) => { return ['from', 'to'].includes(i) })
           }) .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'price object is not valid!', clientMessage: 'وضعیت قیمت های ورودی معتبر نیست' }),
        body('priceOp').optional()
        .custom((v) => {
      
          if ( v["to"] > v["from"]){
          return true}
          else return false 
        }) .withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'price object is not valid!', clientMessage: 'وضعیت قیمت های ورودی معتبر نیست' }),
    ]

}

else if (type === 'body' && input === 'orderIdOp') {
  return [
    body('orderIdOp').optional().isFloat()
    .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' }),

   body('orderIdOp').optional().custom((v) => {
    return (v.toString().indexOf(".1") > -1||(v.toString().indexOf(".2")> -1))
      })
     .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' })

  ]
}
else if (type === 'body' && input === 'isExcel') {
  return [
    body('isExcel').optional().isBoolean().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'excel flag is invalid!', clientMessage: 'وضعیت خروجی اکسل صحیح نیست' }),
  ]
}

  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// ticket  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'body' && input === 'ticketSubject') {
    return [
      body('ticketSubject').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'subject is required!', clientMessage: 'متن موضوع مورد نیاز است!' }),
      body('ticketSubject').isString().isLength({ min: 8, max: 1500 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'subject is not valid!', clientMessage: 'متن موضوع معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'ticketType') {
    return [
      body('ticketType').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketType is required!', clientMessage: 'نوع تیکت مورد نیاز است!' }),
      body('ticketType').isString().custom((k) => {
        return ["Task","Issue"].includes(k)
      })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketType is not valid!', clientMessage: 'نوع تیکت معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'ticketIssue') {
    return [
      body('ticketIssue').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketIssue is required!', clientMessage: 'متن مشکل مورد نیاز است!' }),
      body('ticketIssue').isString().isLength({ min: 8, max: 1500 })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketIssue is not valid!', clientMessage: 'متن مشکل معتبر نیست!' })
    ]
  }
 
  else if (type === 'body' && input === 'ticketId') {
    return [
      body('ticketId').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is required!', clientMessage: 'کد تیکت مورد نیاز است!' }),
      body('ticketId').isMongoId().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is not valid!', clientMessage: 'کد تیکت معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'ticketIdArray') {
    return [
      body('ticketIdArray').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is required!', clientMessage: 'کد تیکت مورد نیاز است!' }),
      body('ticketIdArray').isArray().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is required!', clientMessage: 'کد تیکت مورد نیاز است!' }),

      body('ticketIdArray') .custom((r) => {
      return  r.every((i) => {
          console.log("i is ", i)
          return ObjectId.isValid(i)
        })
      }).
      withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is not valid!', clientMessage: 'کد تیکت معتبر نیست!' })
    ]
  }
  else if (type === 'body' && input === 'ticketComment') {
    return [
      body('ticketComment').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketComment is required!', clientMessage: 'متن تیکت مورد نیاز است!' }),
      body('ticketComment').isString().isLength({ min: 8, max: 1500 }).withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketComment is not valid!', clientMessage: 'متن تیکت معتبر نیست!' })
    ]
  }
 
  else if (type === 'body' && input === 'ticketPriority') {
    return [
      body('ticketPriority').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketPriority is required!', clientMessage: 'متن الویت مورد نیاز است!' }),
      body('ticketPriority').isString().custom((k) => {
        return ["Urgent","Normal","Critical"].includes(k)
      })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticketPriority is not valid!', clientMessage: ' الویت معتبر نیست!' })
    ]
  }


  /// /////////////////////////////////////////
  /// //////// query /////////////////////////
  /// /////////////////////////////////////////

  
  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// ticket  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'query' && input === 'ticketId') {
    return [
      query('ticketId').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is required!', clientMessage: 'کد تیکت مورد نیاز است!' }),
      query('ticketId').isMongoId().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket id is not valid!', clientMessage: 'کد تیکت معتبر نیست!' })
    ]
  }
  else if (type === 'query' && input === 'ticketStatus') {
    return [
      query('ticketStatus').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket status is required!', clientMessage: 'کد تیکت مورد نیاز است!' }),
      query('ticketStatus').isString().custom((k) => {
        return ["0", "1","2","3"].includes(k)
      })
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ticket status is not valid!', clientMessage: 'وضعیت تیکت معتبر نیست!' })
    ]
  }


  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// admin  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
 
  else if (type === 'query' && input === 'categoryCode') {
    return [
      query('categoryCode').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCode is required!', clientMessage: 'کد دسته بندی مورد نیاز است!' }),
      query('categoryCode').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'categoryCode is not valid!', clientMessage: 'کد دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'productCode') {
    return [
      query('productCode').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCode is required!', clientMessage: 'کد محصول مورد نیاز است!' }),
      query('productCode').isString().isLength({ min: 1 }).withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'productCode is not valid!', clientMessage: 'کد محصول معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'code') {
    return [
      query('code').exists()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف مورد نیاز است!' }),
      query('code').isString()
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' }),
      query('code').isLength({ min: 1 })
      .withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Code are not valid!', clientMessage: 'نام کد تخفیف معتبر نیست!' })

    ]
  }

  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// service  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
  else if (type === 'query' && input === 'productId') {
    return [
      query('productId').exists().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is required!', clientMessage: 'شناسه محصول مورد نیاز است!' }),
      query('productId').isHexadecimal().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' }),
      query('productId').isMongoId().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'categoryId') {
    return [
      query('categoryId').optional().isHexadecimal().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CategoryId is not valid!', clientMessage: 'شناسه دسته بندی معتبر نیست!' }),
      query('categoryId').optional().isMongoId().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'CategoryId is not valid!', clientMessage: 'شناسه دسته بندی معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'sortBy') {
    return [
      query('sortBy').optional().isIn(['1', '2', '3', '4', '5']).withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'SortBy is not valid!', clientMessage: 'شناسه مرتب سازی معتبر نیست!' }),
    ]
  } else if (type === 'query' && input === 'id') {
    return [
      query('id').exists().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Transaction Id is required!', clientMessage: 'شناسه تراکنش مورد نیاز است!' }),
      query('id').isHexadecimal().withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Transaction Id is not valid!', clientMessage: 'شناسه تراکنش معتبر نیست!' }),
      query('id').isString().isLength({ min: 128, max: 128 }).withMessage({ clientCode: 10, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Transaction Id is not valid!', clientMessage: 'شناسه تراکنش معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'username') {
    return [
      query('username').exists().withMessage({ clientCode: 70, statusCode: 422, clientMessage: 'Username is required!' }),
      query('username')
      .custom((v) => {
        return isEmailValid(v) || isValidMobilePhone(v)
      })
      .withMessage({ clientCode: 71, statusCode: 422, clientMessage: 'Username is not valid!' })
    ]
  } else if (type === 'query' && input === 'string') {
    return [
      query('string').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      query('string').isUUID().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'page') {
    return [
      query('page').exists().withMessage({ clientCode: 33, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Page is required!', clientMessage: 'عدد صفحه مورد نیاز است!' }),
      query('page').isInt().isLength({ min: 1, max: 2 }).withMessage({ clientCode: 34, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Page is not valid!', clientMessage: 'عدد صفحه معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'location') {
    return [
      query('location').exists().withMessage({ clientCode: 35, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Location is required!', clientMessage: 'مبدا درخواست نشانه لوکیشن را ندارد!' }),
      query('location').isIn(['none', 'home', 'dashboard', 'wallet', 'offers', 'all']).withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'Location is not valid!', clientMessage: 'نشانه لوکیشن معتبر نیست!' })
    ]
  }


  else if (type === 'query' && input === 'reviewId') {
    return [
      query('reviewId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is required!', clientMessage: 'شناسه نظر مورد نیاز است!' }),
      query('reviewId').isMongoId()
      .withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ReviewId Code is not valid!', clientMessage: 'شناسه نظر معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'addressId') {
    return [
      query('addressId').exists().withMessage({ clientCode: 4, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'AddressId Code is required!', clientMessage: 'شناسه آدرس مورد نیاز است!' }),
      query('addressId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'AddressId Code is not valid!', clientMessage: 'شناسه آدرس معتبر نیست!' })
    ]
  }
    /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// wallet  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
else if((type === 'query' && input === 'etheriumAccountAddress')) {
  return [
    query('etheriumAccountAddress')
    .exists()
    .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'etheriumAccountAddress is not exsist!', clientMessage: ' آدرس اکانت اتریوم نباید خالی باشد!' })
    .isString()
    .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "etheriumAccountAddress should be string", clientMessage: 'آدرس اکانت اتریوم باید رشته باشد' })
    .isHexadecimal()
    .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "etheriumAccountAddress should be hexadecimal", clientMessage: 'آدرس اکانت اتریوم باید هگزادسیمال باشد' })
  ]

 }

  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// user  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////
else if((type === 'query' && input === 'pageNumber')) {
  return [
    query('pageNumber')
    .exists()
    .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'page is not exsist!', clientMessage: ' شماره صفحه نباید خالی باشد!' })
    .isInt()
    .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "page number should be number", clientMessage: 'شماره صفحه بایذ عدد صحیح باشد' })
  ]

 } else if (type === 'query' && input === 'interval') {
    return [
      query('interval').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'interval is required!', clientMessage: '  بازه مورد نیاز است!' })
      .isString()
      .custom((i) => {
        return ["h", "d","w","m","y"].includes(i)
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: ' interval is not valid!', clientMessage: ' بازه معتبر نیست!' })
    ] 
  
  
  }else if (type === 'query' && input === 'kind') {
    return [
      query('kind').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'kind is required!', clientMessage: '  نوع سفارش پذیرفته شده مورد نیاز است!' })
      .isString()
      .custom((k) => {
        return ["1", "2"].includes(k)
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: ' kind is not valid!', clientMessage: ' نوع سفارش پذیرفه شده معتبر نیست!' })
    ] 
}else if (type === 'query' && input === 'type') {
    return [
      query('type').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'type is required!', clientMessage: 'نوع سفارش مورد نیاز است!' })
      .isString()
      .custom((k) => {
        return ["1", "2", "3"].includes(k)
      })
      .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'type  is not valid!', clientMessage: ' نوع سفارش معتبر نیست!' })
    ]

  }else if (type === 'query' && input === 'status') {
      return [
        query('status').exists()
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'status is required!', clientMessage: ' حالت مورد نیز است.!' })
        .isString()
        .custom((s) => {
          return ["buy", "sell"].includes(s)
        })
        .withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: ' status is not valid!', clientMessage: ' حالت  معتبر نیست!' })
      ]   


    } else if (type === 'query' && input === 'RialId') {
      return [
        query('RialId').optional().isMongoId()
          .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "rial id is not valid!", clientMessage: 'شناسه ریال معتبر نیست!' })
      ]




  
  }else if (type === 'query' && input === 'pid') {
    return [
      query('pid').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'pid is required!', clientMessage: 'کد پیگیری سفارش مورد نیاز است!' }),
      query('pid').isNumeric().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'pid is not valid!', clientMessage: 'کد پیگیری سفارش معتبر نیست!' }),
      query('pid').custom((v)=>{
        return v.length  === 11
      }).withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'pid is not valid!', clientMessage: 'کد پیگیری سفارش معتبر نیست!' })
  
    ]
  }
  else if (type === 'query' && input === 'Status') {
    return [
      query('Status').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Status is required!', clientMessage: 'کد وضعیت  مورد نیاز است!' }),
      query('Status').isString().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Status is not valid!', clientMessage: 'کد وضعیت معتبر نیست!' })
    ]
  }
  else if (type === 'query' && input === 'Amount') {
    return [
      query('Amount').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Amount is required!', clientMessage: 'مقدار خرید مورد نیاز است!' }),
      query('Amount').isNumeric().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Amount is not valid!', clientMessage: 'مقدار خرید معتبر نیست!' })
    ]
  }
  else if (type === 'query' && input === 'Authority') {
    return [
      query('Authority').exists().withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Authority is required!', clientMessage: 'شناسه مخصوص زرین پال مورد نیاز است!' }),
      query('Authority').isNumeric().withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Authority is not valid!', clientMessage: 'شناسه مخصوص زرین پال معتبر نیست!' }),
      query('Authority').custom((v)=>{
        return v.length === 36
      }).withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'authority is not valid!', clientMessage: 'شناسه مخصوص زرین پال معتبر نیست!' })
   
    ]
  }
  else if (type === 'query' && input === 'questionId') {
    return [
      query('questionId').exists().withMessage({ clientCode: 4, statusCode: 422, messageEnglish: 'Verification Code is required!', clientMessage: 'کد راستی آزمایی مورد نیاز است!' }),
      query('questionId').isMongoId().withMessage({ clientCode: 5, statusCode: 422, messageEnglish: 'Verification Code is not valid!', clientMessage: 'کد راستی آزمایی معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'orderMongoId') {
    return [
        query('orderMongoId').exists()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "order id fields are not valid!", clientMessage: ' شناسه سفارش ورودی موجود نیست !' }),
        query('orderMongoId').isMongoId()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "order id fields are not valid!", clientMessage: 'شناسه  سفارش ورودی معتبر نیست!' }),
    ]
  } else if (type === 'query' && input === 'orderId') {
    return [
      query('orderId').exists().isFloat()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not present!", clientMessage: 'شناسه ورودی سفارش موجود نیست!' }),
       query('orderId') 
       .custom((v) => {
        return ['1', '2', '3', '4'].includes(v.toString().split('.')[1])
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' })   
    ]
  } else if (type === 'query' && input === 'orderIdOp') {
    return [
      query('orderIdOp').optional().isFloat()
        .withMessage({ clientCode: 77, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not present!", clientMessage: 'شناسه ورودی سفارش موجود نیست!' }),
       query('orderIdOp').optional() 
       .custom((v) => {
        return ['1', '2', '3', '4'].includes(v.toString().split('.')[1])
        })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "orderOrderId's fields are not valid!", clientMessage: 'شناسه ورودی سفارش معتبر نیست!' })   
    ]
  } else if (type === 'query' && input === 'productId') {
    return [
      query('productId').exists().withMessage({ clientCode: 27, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is required!', clientMessage: 'شناسه محصول مورد نیاز است!' }),
      query('productId').isHexadecimal().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' }),
      query('productId').isMongoId().withMessage({ clientCode: 28, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ProductId is not valid!', clientMessage: 'شناسه محصول معتبر نیست!' })
    ]
  }
  else if (type === 'query' && input === 'phoneNumber') {
    return [
      query('phoneNumber').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phoneNumber's is not valid!", clientMessage: 'شماره موبایل معتبر نیست!' }),
      query('phoneNumber')
        .custom((v) => {
          return  v.length === 11 && (v[0] == '0' || v[0] == '۰') && (v[1] == '9' || v[1] == '۹') && (/^\d+$/.test(v) || /^\d+$/.test(numbersFormatter( v, 'en')))
        })
        .isLength({ min: 10, max: 11 })
        .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: "phoneNumber's is not valid!", clientMessage: 'شماره موبایل معتبر نیست!' })]
  
  } else if (type === 'query' && input === 'tags') {
    return [
      query('tags').exists()
      .withMessage({ clientCode: 78, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Tags is required!', clientMessage: 'تگ مورد نیاز است!' }),
      query('tags').isString()
      .withMessage({ clientCode: 79, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'Tags is not valid!', clientMessage: 'تگ معتبر نیست!' })
    ]
  }
  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// admin  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////

  else if (type === 'query' && input === 'searchType') {
    return [
      query('searchType').exists().withMessage({ clientCode: 35, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'searchType is required!', clientMessage: 'شناسه جستجو مورد نیاز است!' }),
      query('searchType').isIn(['users', 'orders', 'products']).withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'searchType is not valid!', clientMessage: 'شناسه جستجو معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'fromDate') {
    return [
      query('fromDate').optional().custom((v)=>{
        let date =  new Date(v).getTime()
        return date < new Date().getTime()
      })
      .withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'fromDate is not valid!', clientMessage: 'شناسه جستجو معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'toDate') {
    return [
      query('toDate').optional().custom((v)=>{
        let  date =  new Date(v).getTime()
        return !isNaN(date)
      })
      .withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'toDate is not valid!', clientMessage: 'شناسه جستجو معتبر نیست!' })
    ]
  } else if (type === 'query' && input === 'codeId') {
    return [
      query('codeId').exists()
      .withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'toDate is not valid!', clientMessage: 'شناسه کد موجود نیست!' }),
      query('codeId').isMongoId()
      .withMessage({ clientCode: 36, statusCode: 422, messageEnglish: 'toDate is not valid!', clientMessage: 'شناسه کد معتبر نیست!' })
    ]
  }

  /// /////////////////////////////////////////
  /// //////// param /////////////////////////
  /// /////////////////////////////////////////

  else if (type === 'param' && input === 'imageName') {
    return [
      param('imageName').exists().withMessage({ clientCode: 41, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'ImageName is required!', clientMessage: 'آدرس عکس مورد نیاز است!' })
    ]
  }
  /// /////////////////////////////////////////
  /// //////// cookie  //////////////////////////
  /// /////////////////////////////////////////

  /// /////////////////////////////////////////////////////////////////////////////////
  /// //////// service  ///////////////////////////////////////////////////////////////
  /// /////////////////////////////////////////////////////////////////////////////////

  else if (type === 'cookie' && input === 'sessionId') {
    return [
      cookie('sessionId').exists().withMessage({ clientCode: 41, statusCode: 422, title: 'خطا رخ داد', messageEnglish: 'sessionId is required!', clientMessage: 'مشکلی پیش آمده است!' })
    ]
  }
}


export const validate = (req, res, next) => {
  const Result = validationResult(req)
  if (!Result["errors"] || Result["errors"].length === 0) {
    next()
  } else {
    console.log(Result["errors"])
    const error = new myError(
      Result["errors"][0].msg.messageEnglish,
      Result["errors"][0].msg.statusCode,
      Result["errors"][0].msg.clientCode,
      Result["errors"][0].msg.clientMessage,
      Result["errors"][0].msg.title,
    )
    next(error)
  }
}




