const data = require('./data.json');

module.exports = (req, res, next) => {
  if (req.url.startsWith('/search') && req.method === 'GET') {
    try {
      const searchText = req.query.name;
      const searched = data.products.filter(
        (product) =>
          (product.name.toLowerCase()).includes(searchText.toLowerCase())
      );
      return res.json(searched);
    } catch (error) {
      console.error('Error loading data:', error);
      res.status(500).json({ message: 'Internal Server Error' });
    }
  } else if (req.url.startsWith('/report') && req.method === 'GET') {
    try {
      // Добавляем фильтрацию по полю dateTime
      const fromDate = req.query.fromDate;
      const toDate = req.query.toDate;
      const filteredData = filterByDateTime(data.items, fromDate, toDate);

      // Возвращаем отфильтрованные и отсортированные элементы
      const reportData = generateReport(filteredData, data.bikes).sort((a, b) => a.dateTime - b.dateTime);
      res.json(reportData);
    } catch (error) {
      console.error('Error loading data:', error);
      return res.status(500).json({ message: 'Internal Server Error' });
    }
  } else {
    next();
  }
};

// Функция generateReport для примера
function generateReport(items, bikes) {
  // Ваш код для генерации отчета
  return items.map((item) => ({
    id: item.id,
    dateTime: item.dateTime,
    weight: item.weight,
    radius: item.radius,
    colorbike: item.colorbike,
    maxCount: item.maxCount,
    bikeName: bikes.find((bike) => bike.id === item.bikeId)?.name,

    // Другие поля отчета, которые вам нужны
  }));
}

// Функция для фильтрации по полю dateTime
function filterByDateTime(items, fromDate, toDate) {
  if (!fromDate && !toDate) {
    return items;
  }

  const filteredItems = items.filter((item) => {
    const itemDate = item.dateTime;
    return (!fromDate || itemDate >= fromDate) && (!toDate || itemDate <= toDate);
  });

  return filteredItems;
}
