/* eslint-disable camelcase */
const ExpertiseModel = require('../../../models/ExpertiseModel')

const createExpertise = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')

    const { expertise } = req.body
    if (!expertise
    ) {
      return res.status(422).json({
        error: true,
        message: 'اطلاعات ارسالی اشتباه است'
      })
    }
    // بررسی وجود تخصص با این نام در پایگاه داده
    const existingExpertise = await ExpertiseModel.findOne({ expertise })

    if (existingExpertise) {
      return res.status(400).json({ message: 'تخصص با این نام قبلاً ثبت شده است' })
    }

    // ایجاد یک نمونه جدید از مدل ExpertiseModel
    const newExpertise = new ExpertiseModel({
      expertise
    })

    // ذخیره تخصص جدید در پایگاه داده
    await newExpertise.save()

    res.json({ message: 'تخصص با موفقیت اضافه شد' })
  } catch (error) {
    next(error)
  }
}

const createSubExpertise = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')

    const expertiseId = req.query.id
    const { name } = req.body
    if (!expertiseId || !name) {
      return res.status(422).json({
        error: true,
        message: 'اطلاعات ارسالی اشتباه است'
      })
    }
    // یافتن تخصص موردنظر از طریق آیدی
    const expertise = await ExpertiseModel.findById(expertiseId)

    if (!expertise) {
      return res.status(404).json({ message: 'تخصص موردنظر یافت نشد' })
    }

    // اضافه کردن زیرتخصص جدید به آرایه sub_expertise تخصص موجود
    expertise.sub_expertise.push({ name })
    await expertise.save()

    res.json({ message: 'زیرتخصص با موفقیت به تخصص اضافه شد' })
  } catch (error) {
    next(error)
  }
}
const getExpertise = async (req, res, next) => {
  try {
    const expertises = await ExpertiseModel.find().select('expertise sub_expertise')
    res.json({ expertises })
  } catch (error) {
    next(error)
  }
}

// ویرایش تخصص
const editExpertise = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')

    const { expertise } = req.body
    const expertiseId = req.params.id

    if (!expertise || !expertiseId) {
      return res.status(422).json({ message: 'اطلاعات ارسالی اشتباه است' })
    }

    const updatedExpertise = await ExpertiseModel.findByIdAndUpdate(
      expertiseId,
      { expertise },
      { new: true }
    )

    if (!updatedExpertise) {
      return res.status(404).json({ message: 'تخصص یافت نشد' })
    }

    res.json({ message: 'تخصص با موفقیت ویرایش شد' })
  } catch (error) {
    next(error)
  }
}

module.exports = {
  createExpertise,
  createSubExpertise,
  getExpertise,
  editExpertise

}
