const db = require("../../db/db");

class ProductController {
  async findAll(req, res) {

    const params = req.query;
    const _products = await db.getProducts(params.dateExpired, params.postalCode);
    let productsFilter = _products[0]

    if (Number(params.recommend)) {
      productsFilter = productsFilter.filter(item => item.recommend == params.recommend)
    }
    if (params.type) {
      productsFilter = productsFilter.filter(item => item.type === params.type)
    }

    if (params.minPrice && !params.maxPrice) {
      productsFilter = productsFilter.filter(item => {
        const price = Number(item.price)
        if (price >= Number(params.minPrice)) {
          return item
        }
      })
    }
    if (params.maxPrice && !params.minPrice) {
      productsFilter = productsFilter.filter(item => {
        const price = Number(item.price)
        if (price <= Number(params.maxPrice)) {
          return item
        }
      })
    }
    if (params.maxPrice && params.minPrice) {
      productsFilter = productsFilter.filter(item => {
        const price = Number(item.price)
        if (price >= Number(params.minPrice) && price <= Number(params.maxPrice)) {
          return item
        }
      })
    }


    if (Number(params.bigPrice)) {
      productsFilter.sort((a, b) => {
        const itemA = Number(a.price)
        const itemB = Number(b.price)
        return itemB - itemA;
      })
    }

    if (Number(params.lowPrice)) {
      productsFilter.sort((a, b) => {
        const itemA = Number(a.price)
        const itemB = Number(b.price)
        return itemA - itemB;
      })
    }

    if (Number(params.order_descending)) {
      productsFilter.sort((a, b) => {
        const itemA = a.order_position
        const itemB = b.order_position
        return itemB - itemA;
      })
    }

    if (Number(params.order_crescent)) {
      productsFilter.sort((a, b) => {
        const itemA = a.order_position
        const itemB = b.order_position
        return itemA - itemB;
      })
    }

    if (Number(params.isNew)) {
      productsFilter = productsFilter.filter(item => item.isNew == Number(params.isNew))
    }

    /*   let productsFilterPages = []
      const totalItens = params?.itens ? Number(params.itens) : 200
      const page = params.page ? Number(params.page) : 1
      const startIndex = (totalItens * page) - totalItens
      const lastIndex = (totalItens * page)
      const products = productsFilter.slice(startIndex, lastIndex)
      productsFilterPages.push({
        page: page,
        productsPerPage: products.length,
        products: products
      }) */


    return res.status(200).send({
      data: productsFilter
    })
  }

  async findById(req, res) {
    const { dateExpired, postalCode } = req.query
    const id = Number(req.params.id)
    const product = await db.getProductById(req.params.id);
    const filterProduct = (product[0][0] && product[0][0])?product[0][0]:{};

    return res.status(200).send({
      data: filterProduct
    })
  }
}

module.exports = new ProductController();