const AdminModel = require('../models/AdminModel')
const jwt = require('jsonwebtoken')

module.exports = async (req, res, next) => {
  if (!('authorization' in req.headers)) {
    return res.status(401).send({
      status: 'error',
      code: 401,
      message: 'you are not authorized!'
    })
  }

  const token = req.header('Authorization').split(' ')[1]
  if (!token) return res.status(401).send('Access Denied')
  let decodedToken
  try {
    decodedToken = jwt.verify(token, process.env.APP_SECRET)
  } catch (err) {
    return res.status(401).send({
      status: 'error',
      code: 401,
      message: 'Your token is not valid!',
      error: err.message
    })
  }
  if (!decodedToken) {
    return res.status(401).send({
      status: 'error',
      code: 401,
      message: 'Your token is not valid!'
    })
  }
  try {
    // پیدا کردن کاربر با استفاده از اطلاعات موجود در توکن
    const admin = await AdminModel.findOne({ _id: decodedToken.id })
    if (!admin) {
      return res.status(403).send({
        status: 'error',
        code: 403,
        message: 'Access denied!'
      })
    }

    // ادامه مسیر در صورتی که کاربر ادمین باشد
    req.admin = admin
    next()
  } catch (error) {
    return res.status(500).send({
      status: 'error',
      code: 500,
      message: 'Internal Server Error',
      error: error.message
    })
  }
}
