const categoryDb = require("../db/category.db");  // DB işlemleri için category.db.js'i import ediyoruz
const dealDb = require("../db/deal.db"); 
/**
 * Kategoriyi slug'a göre bul
 * Bu fonksiyon, verilen slug'a sahip kategori bilgilerini döndürür
 */
async function findCategoryBySlug(slug) {
  try {
    // Kategori bilgisini slug'a göre buluyoruz
    const category = await categoryDb.findCategoryBySlug(slug, {
      include: {
        children: true,  // Alt kategorileri de dahil edebiliriz
        deals: true,     // Kategorinin deals ilişkisini alıyoruz
      },
    });

    if (!category) {
      throw new Error("Kategori bulunamadı");
    }

    // Kategori breadcrumb'ını alıyoruz
    const breadcrumb = await categoryDb.getCategoryBreadcrumb(category.id);
    
    return { category, breadcrumb };  // Kategori ve breadcrumb'ı döndürüyoruz
  } catch (err) {
    throw new Error(`Kategori bulma hatası: ${err.message}`);
  }
}

async function getDealsByCategoryId(categoryId, page = 1, limit = 10, filters = {}) {
  try {
    // Sayfalama ve filtreleme için gerekli ayarlamaları yapıyoruz
    const take = Math.min(Math.max(Number(limit) || 10, 1), 100);  // Limit ve sayfa sayısını hesaplıyoruz
    const skip = (Math.max(Number(page) || 1, 1) - 1) * take;  // Sayfa başlangıcı

    // Kategorinin fırsatlarını almak için veritabanında sorgu yapıyoruz
    const where = {
      categoryId: categoryId,
      ...(filters.q && {
        OR: [
          { title: { contains: filters.q, mode: 'insensitive' } },
          { description: { contains: filters.q, mode: 'insensitive' } },
        ],
      }),
      ...(filters.status && { status: filters.status }),
      ...(filters.price && { price: { gte: filters.price } }),  // Fiyat filtresi
      // Diğer filtreler de buraya eklenebilir
    };

    // `getDealCards` fonksiyonunu çağırıyoruz ve sayfalama, filtreleme işlemlerini geçiyoruz
    const deals = await dealDb.getDealCards({
      where,
      skip,
      take,  // Sayfalama işlemi için take parametresini gönderiyoruz
    });

    return deals;  // Fırsatları döndürüyoruz
  } catch (err) {
    throw new Error(`Kategoriye ait fırsatlar alınırken hata: ${err.message}`);
  }
}




module.exports = {
  findCategoryBySlug,
  getDealsByCategoryId,
};
