/* eslint-disable camelcase */
const AdminModel = require('../../../models/AdminModel')
const bcrypt = require('bcryptjs')
const TokenService = require('../../../services/TokenService')

const adminLogin = async (req, res, next) => {
  try {
    // اعتبارسنجی ورودی ها
    const { user_name, password } = req.body
    if (!user_name || !password) {
      return res.status(422).json({
        error: true,
        message: 'اطلاعات ارسالی اشتباه است'
      })
    }
    // یافتن کاربر با نام کاربری
    const userLow = user_name.toLowerCase()
    const user = await AdminModel.findOne({ user_name: userLow })

    if (!user) {
      return res.status(404).json({
        error: true,
        message: 'کاربری با این نام کاربری یافت نشد'
      })
    }
    if (!user.password) {
      return res.status(422).json({
        error: true,
        message: 'رمز عبور برای این کاربر تنظیم نشده است'
      })
    }
    const isPasswordValid = await bcrypt.compare(password, user.password)
    if (!isPasswordValid) {
      return res.status(422).json({
        error: true,
        message: 'نام کاربری یا رمز عبور اشتباه است'
      })
    }

    // اگر هم نام کاربری و هم رمز عبور درست بود، ارسال پیام موفقیت آمیز
    const token = TokenService.sign({ id: user._id })
    return res.json({
      message: 'کد تایید صحیح بود',
      token,
      id: user._id
    })
  } catch (error) {
    next(error)
  }
}
const changePassword = async (req, res, next) => {
  try {
    // اعتبارسنجی ورودی ها
    const { user_name, password, new_password } = req.body
    if (!user_name || !password || !new_password) {
      return res.status(422).json({
        error: true,
        message: 'اطلاعات ارسالی اشتباه است'
      })
    }
    // یافتن کاربر با نام کاربری
    const userLow = user_name.toLowerCase()
    const user = await AdminModel.findOne({ user_name: userLow })

    if (!user) {
      return res.status(404).json({
        error: true,
        message: 'کاربری با این نام کاربری یا رمز عبور یافت نشد'
      })
    }
    const isPasswordValid = await bcrypt.compare(password, user.password)
    if (!isPasswordValid) {
      return res.status(422).json({
        error: true,
        message: 'نام کاربری یا رمز عبور اشتباه است'
      })
    }

    // هش کردن پسورد جدید و ذخیره در دیتابیس
    const hashedPassword = await bcrypt.hash(new_password, 10)
    user.password = hashedPassword
    await user.save()

    return res.json({
      message: 'کلمه عبور با موفقیت ذخیره شد'
    })
  } catch (error) {
    next(error)
  }
}

module.exports = {
  adminLogin, changePassword
}
