/* eslint-disable camelcase */
const { default: mongoose } = require('mongoose')
const jMoment = require('moment-jalaali')
const AdvertisingProfileModel = require('../../../models/AdvertisingProfile')
const AdvertisingModel = require('../../../models/AdvertisingModel')

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

    // eslint-disable-next-line no-unused-vars
    const { page = 1, limit = 10, expertise, most_price, most_requests, age, gender } = req.query
    const filter = {} // افزودن شرط‌های دیگر برای فیلتر

    // if (expertise) {
    //   filter.expertise = expertise
    // }
    // if (age) {
    //   filter.age = age
    // }
    // if (gender) {
    //   filter.gender = gender
    // }
    // استفاده از مدل پیجینیت شده برای دریافت نتایج صفحه‌بندی شده
    const options = {
      page: parseInt(page), // تبدیل صفحه به عدد صحیح
      limit: parseInt(limit), // تبدیل محدودیت به عدد صحیح
      sort: { createdAt: -1 },
      populate: [
        { path: 'user', select: '_id user_name first_name last_name' }
      ]
    }
    const shops = await AdvertisingProfileModel.paginate(filter, options)
    const newShops = shops.docs.map(user => ({
      _id: user._id,
      user_name: user?.user?.user_name,
      first_name: user?.user?.first_name,
      last_name: user?.user?.last_name,
      user_id: user?.user?._id,
      profile_image: user.profile_image,
      category: user.category,
      vitrine_name: user.vitrine_name,
      province: user.province,
      city: user.city,
      neighbourhood: user.neighbourhood,
      createdAt: jMoment(user.createdAt).format('jYYYY-jMM-jDD HH:mm')
    }))
    res.status(200).json({
      shops: newShops,
      totalPages: shops.totalPages, // ارسال تعداد کل صفحات
      totalItems: shops.totalDocs // ارسال تعداد کل آیتم‌ها
    })
  } catch (error) {
    // در صورت بروز خطا، ارسال پیام خطا به کاربر
    console.error('Error in getProjectTypes:', error)
    res.status(500).json({ message: 'خطا در دریافت انواع پروژه.' })
  }
}
const getShopDetail = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')
    const profile_id = req.query.profile_id
    // eslint-disable-next-line no-unused-vars
    // دریافت جزئیات فروشگاه با استفاده از profile_id
    const shop = await AdvertisingProfileModel.findById(profile_id)
      .populate('user', '_id user_name first_name last_name')
      .exec()
    const userAds = await AdvertisingModel.find({ creator_id: shop?.user })
    // جمع‌آوری اطلاعات از تبلیغات‌ها
    let allImages = []
    let allServices = []
    let allFeatures = []
    for (const ad of userAds) {
      allImages = allImages.concat(ad.images)
      allServices = allServices.concat(ad.services)
      allFeatures = allFeatures.concat(ad.features)
    }
    // حذف آیتم‌های null و تکراری از allFeatures
    const uniqueFeatures = []
    const featureTitles = new Set()
    for (const feature of allFeatures) {
      if (feature && !featureTitles.has(feature.title)) {
        uniqueFeatures.push(feature)
        featureTitles.add(feature.title)
      }
    }
    if (!shop) {
      return res.status(404).json({ message: 'فروشگاه مورد نظر یافت نشد' })
    }
    const response = {
      _id: shop?._id,
      user_name: shop?.user?.user_name,
      first_name: shop?.user?.first_name,
      last_name: shop?.user?.last_name,
      user_id: shop?.user?._id,
      profile_image: shop?.profile_image,
      category: shop?.category,
      vitrine_name: shop?.vitrine_name,
      province: shop?.province,
      city: shop?.city,
      neighbourhood: shop?.neighbourhood,
      contactInfo: shop?.contactInfo,
      address: shop?.address,
      allImages: allImages?.reverse(),
      allServices,
      allFeatures: uniqueFeatures,
      about_us: shop?.about_us
      // اطلاعات اضافی که بعداً به شما می‌گویم
    }
    return res.status(200).json({ shop: response })
  } catch (error) {
    next(error)
  }
}
const updateShop = async (req, res, next) => {
  try {
    const shopId = req.query.shopId // دریافت شناسه کاربر از درخواست

    // چک کردن اعتبار شناسه کاربر
    if (!mongoose.Types.ObjectId.isValid(shopId)) {
      return res.status(400).json({ message: 'شناسه کاربر معتبر نیست' })
    }

    // فیلدهایی که می‌خواهید آپدیت شوند را از درخواست دریافت کنید
    const updateFields = req.body

    // اجرای آپدیت و بازگشت مقدار آپدیت شده
    const updatedUser = await AdvertisingProfileModel.findByIdAndUpdate(
      shopId,
      updateFields,
      { new: true }
    )

    // بررسی آیا کاربر وجود دارد یا نه
    if (!updatedUser) {
      return res.status(404).json({ message: 'کاربر مورد نظر یافت نشد' })
    }

    // ارسال پاسخ با مقادیر آپدیت شده
    res.status(200).json({ message: 'کاربر با موفقیت ویرایش شد', id: updatedUser._id })
  } catch (error) {
    const errors = []

    if (error.code === 11000) {
      // Duplicate key error
      for (const key in error.keyValue) {
        errors.push({ message: `ارور در فیلد ${key}` })
      }
    } else {
      errors.push({ message: 'خطا در آپدیت کاربر' })
    }

    res.status(500).json({ errors })
  }
}

module.exports = {
  getShops, getShopDetail, updateShop
}
