const SubCategory = require('../models/SubCategory');
const Category = require('../models/Category');

exports.getAllSubCategories = async (req, res) => {
  try {
    const subCategories = await SubCategory.getAll();
    res.json(subCategories);
  } catch (error) {
    console.error('Get all subcategories error:', error);
    res.status(500).json({ message: 'Alt kategoriler alınırken hata oluştu' });
  }
};

exports.getSubCategoriesByCategory = async (req, res) => {
  try {
    const subCategories = await SubCategory.getByCategory(req.params.categoryId);
    res.json(subCategories);
  } catch (error) {
    console.error('Get subcategories by category error:', error);
    res.status(500).json({ message: 'Alt kategoriler alınırken hata oluştu' });
  }
};

exports.getActiveSubCategories = async (req, res) => {
  try {
    const subCategories = await SubCategory.getActive();
    res.json(subCategories);
  } catch (error) {
    console.error('Get active subcategories error:', error);
    res.status(500).json({ message: 'Alt kategoriler alınırken hata oluştu' });
  }
};

exports.getSubCategoryById = async (req, res) => {
  try {
    const subCategory = await SubCategory.getById(req.params.id);
    if (!subCategory) {
      return res.status(404).json({ message: 'Alt kategori bulunamadı' });
    }
    res.json(subCategory);
  } catch (error) {
    console.error('Get subcategory error:', error);
    res.status(500).json({ message: 'Alt kategori alınırken hata oluştu' });
  }
};

exports.getSubCategoryBySlug = async (req, res) => {
  try {
    const subCategory = await SubCategory.getBySlug(req.params.slug);
    if (!subCategory) {
      return res.status(404).json({ message: 'Alt kategori bulunamadı' });
    }
    res.json(subCategory);
  } catch (error) {
    console.error('Get subcategory by slug error:', error);
    res.status(500).json({ message: 'Alt kategori alınırken hata oluştu' });
  }
};

exports.getSubCategoryWithTours = async (req, res) => {
  try {
    const subCategory = await SubCategory.getWithTours(req.params.id);
    if (!subCategory) {
      return res.status(404).json({ message: 'Alt kategori bulunamadı' });
    }
    res.json(subCategory);
  } catch (error) {
    console.error('Get subcategory with tours error:', error);
    res.status(500).json({ message: 'Alt kategori alınırken hata oluştu' });
  }
};

exports.createSubCategory = async (req, res) => {
  try {
    const { category_id, name, slug, description, image_url, status, display_order } = req.body;

    if (!category_id || !name || !slug) {
      return res.status(400).json({ message: 'Kategori ID, ad ve slug alanları zorunludur' });
    }

    // Check if slug already exists in categories
    const categoryWithSlug = await Category.getBySlug(slug);
    if (categoryWithSlug) {
      return res.status(400).json({ message: 'Bu slug ana kategoride kullanılıyor. Lütfen farklı bir slug seçin.' });
    }

    const subCategoryId = await SubCategory.create({
      category_id,
      name,
      slug,
      description,
      image_url,
      status,
      display_order
    });

    res.status(201).json({
      message: 'Alt kategori başarıyla oluşturuldu',
      subCategoryId
    });
  } catch (error) {
    console.error('Create subcategory error:', error);
    if (error.code === 'ER_DUP_ENTRY') {
      return res.status(400).json({ message: 'Bu slug zaten kullanımda' });
    }
    res.status(500).json({ message: 'Alt kategori oluşturulurken hata oluştu' });
  }
};

exports.updateSubCategory = async (req, res) => {
  try {
    const { category_id, name, slug, description, image_url, status, display_order } = req.body;

    if (!category_id || !name || !slug) {
      return res.status(400).json({ message: 'Kategori ID, ad ve slug alanları zorunludur' });
    }

    // Check if slug already exists in categories
    const categoryWithSlug = await Category.getBySlug(slug);
    if (categoryWithSlug) {
      return res.status(400).json({ message: 'Bu slug ana kategoride kullanılıyor. Lütfen farklı bir slug seçin.' });
    }

    const updated = await SubCategory.update(req.params.id, {
      category_id,
      name,
      slug,
      description,
      image_url,
      status,
      display_order
    });

    if (!updated) {
      return res.status(404).json({ message: 'Alt kategori bulunamadı' });
    }

    res.json({ message: 'Alt kategori başarıyla güncellendi' });
  } catch (error) {
    console.error('Update subcategory error:', error);
    if (error.code === 'ER_DUP_ENTRY') {
      return res.status(400).json({ message: 'Bu slug zaten kullanımda' });
    }
    res.status(500).json({ message: 'Alt kategori güncellenirken hata oluştu' });
  }
};

exports.deleteSubCategory = async (req, res) => {
  try {
    const deleted = await SubCategory.delete(req.params.id);

    if (!deleted) {
      return res.status(404).json({ message: 'Alt kategori bulunamadı' });
    }

    res.json({ message: 'Alt kategori başarıyla silindi' });
  } catch (error) {
    console.error('Delete subcategory error:', error);
    res.status(500).json({ message: 'Alt kategori silinirken hata oluştu' });
  }
};
