const { body, validationResult } = require('express-validator')
const User = require('../models/User')
const SurveyCheck = require('../models/SurveyCheck')
const { res406, res500, checkValidations } = require('../plugins/controllersHelperFunctions')
const { SMS } = require('../plugins/SMS_Module')
const { phrases } = require('../plugins/SMS_Phrases')

module.exports.reception = [
  [
    body('BusinessID').notEmpty().withMessage('BusinessID is required'),
    body('TempReceiptTransNumber').notEmpty().withMessage('TempReceiptTransNumber is required'),
    body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
  ],
  checkValidations(validationResult),
  async (req, res) => {
    const { BusinessID, TempReceiptTransNumber, ItemReceptionTransNumber } = req.body
    try {
      // check user id and agent status
      const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
      if (!user) return res406(res, 'Incorrect BusinessID')

      function getMessageTxt() {
        const msgArray = [
          'مشتری گرامی',
          user.first_name + ' ' + user.last_name,
          '\n',
          'کالاهای شما با شماره پذیرش موقت',
          TempReceiptTransNumber,
          'توسط واحد گارانتی آسان سرویس دریافت شد و با شماره پذیرش دائم',
          ItemReceptionTransNumber,
          'دردست بررسی می باشد. به محض آماده شدن کالاها به شما اطلاع رسانی خواهد شد.',
          '\n',
          phrases.signature
        ]
        return msgArray.join(' ')
      }

      SMS([user.mobile_number], getMessageTxt())
      return res.json({ message: 'Message sent successfully' })
    } catch (e) {
      return res500(res, e)
    }
  }
]

module.exports.repair = [
  [
    body('BusinessID').notEmpty().withMessage('BusinessID is required'),
    body('TransNumber').notEmpty().withMessage('TransNumber is required'),
    body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
  ],
  checkValidations(validationResult),
  async (req, res) => {
    const { BusinessID, ItemReceptionTransNumber, TransNumber } = req.body
    try {
      // check user id and agent status
      const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
      if (!user) return res406(res, 'Incorrect BusinessID')

      function getMessageTxt() {
        const msgArray = [
          'مشتری گرامی',
          user.first_name + ' ' + user.last_name,
          '\n',
          'مراحل تعمیر و بررسی کالاهای ارسالی شما با شماره پذیرش',
          ItemReceptionTransNumber,
          'توسط واحد گارانتی آسان سرویس انجام شد و با شماره فاکتور گارانتی',
          TransNumber,
          'ثبت شد. به زودی کالاها به آدرس شما ارسال می گردد. ',
          '\n',
          phrases.signature
        ]
        return msgArray.join(' ')
      }

      SMS([user.mobile_number], getMessageTxt())
      return res.json({ message: 'Message sent successfully' })
    } catch (e) {
      return res500(res, e)
    }
  }
]

module.exports.sendBack = [
  [
    body('BusinessID').notEmpty().withMessage('BusinessID is required'),
    body('DeliveryCode').notEmpty().withMessage('DeliveryCode is required'),
    body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required')
  ],
  checkValidations(validationResult),
  async (req, res) => {
    const { BusinessID, ItemReceptionTransNumber, DeliveryCode } = req.body
    try {
      // check user id and agent status
      const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] })
      if (!user) return res406(res, 'Incorrect BusinessID')

      function getMessageTxt() {
        const msgArray = [
          'مشتری گرامی',
          user.first_name + ' ' + user.last_name,
          '\n',
          'کالاهای ارسالی شما با شماره پذیرش',
          ItemReceptionTransNumber,
          'پس از انجام مراحل گارانتی توسط واحد گارانتی به آدرس شما ارسال شد. شماره بیجک بسته ارسالی',
          DeliveryCode,
          'می باشد. از همراهی و خرید شما سپاس گزاریم. ',
          '\n',
          phrases.signature
        ]
        return msgArray.join(' ')
      }

      const surveyData = {
        code: ItemReceptionTransNumber,
        user: user._id,
        timeAdded: Date.now()
      }
      const surveyCheck = new SurveyCheck(surveyData)
      surveyCheck.save(err => {
        if (err) console.log('surveyCheck save error', err)
      })

      SMS([user.mobile_number], getMessageTxt())
      return res.json({ message: 'Message sent successfully' })
    } catch (e) {
      return res500(res, e)
    }
  }
]
