const UserModel = require('../../../models/UserModel')
const { check, validationResult } = require('express-validator')
const { default: axios } = require('axios')
const loginValidationRules = () => {
  return [
    check('mobile')
      .notEmpty().withMessage('شماره موبایل نمی‌تواند خالی باشد')
      .isLength({ min: 11, max: 11 }).withMessage('شماره موبایل باید دقیقاً 11 رقم باشد')
      .matches(/^09[0-9]{9}$/).withMessage('فرمت شماره موبایل صحیح نیست')
  ]
}

const loginUser = async (req, res, next) => {
  try {
    const errors = validationResult(req)
    if (!errors.isEmpty()) {
      return res.status(422).json({ errors: errors.array() })
    }

    const { mobile } = req.body
    if (!mobile) {
      return res.status(422).json({
        error: true,
        message: 'شماره موبایل نمی‌تواند خالی باشد'
      })
    }

    // const existingUser = await UserModel.findOne({ mobile })
    // if (!existingUser) {
    //   return res.status(422).json({ error: true, message: 'کاربری با این شماره موبایل یافت نشد' })
    // }
    function generateOTP () {
      return Math.floor(100000 + Math.random() * 900000)
    }

    const otp = generateOTP()
    // eslint-disable-next-line no-unused-vars
    const user = await UserModel.findOneAndUpdate(
      { mobile },
      { $set: { mobile, otp } },
      { upsert: true, new: true, lean: true }
    )
    // زمانبندی تنظیم مقدار otp به null پس از 10 دقیقه
    setTimeout(() => {
      UserModel.findOneAndUpdate({ mobile }, { $set: { otp: null } }, { new: true })
        .then(() => {})
        .catch(error => console.error('Error setting OTP to null:', error))
    }, 5 * 60 * 1000)
    const data = JSON.stringify({
      mobile,
      templateId: '930719',
      parameters: [
        { name: 'CODE', value: otp.toString() }
      ]
    })

    const config = {
      method: 'post',
      url: 'https://api.sms.ir/v1/send/verify',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'text/plain',
        'x-api-key': '2JKxGbTzE64t0YTkjip6RYHnm9mq1haMlidF8WWwQunwubHFVW6iaMmfFQbMXEDt'
      },
      data
    }

    axios(config)
      .then(function (response) {
      })
      .catch(function (error) {
        console.log(error)
      })

    res.status(200).json({
      success: true,
      message: 'کد تایید ارسال شد'
    })
  } catch (error) {
    next(error)
  }
}

module.exports = {
  loginValidationRules,
  loginUser
}
