'use server'

import prisma from '@/lib/prisma'
import { revalidatePath } from 'next/cache'
import { redirect } from 'next/navigation'

export async function createCategory(_prevState: unknown, formData: FormData) {
  const name_tr = formData.get('name_tr') as string
  const name = formData.get('name') as string || name_tr
  const order_num = parseInt(formData.get('order_num') as string, 10) || 0
  const status = formData.get('status') === 'on' ? 1 : 0

  if (!name_tr) {
    return { error: 'Lütfen kategori adını doldurun.' }
  }

  try {
    await prisma.categories.create({
      data: {
        name,
        name_tr,
        slug: name_tr.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
        order_num,
        status,
      }
    })
  } catch (error) {
    console.error('Create category error:', error)
    return { error: 'Kategori eklenirken hata oluştu.' }
  }

  revalidatePath('/admin/categories')
  revalidatePath('/')
  redirect('/admin/categories')
}

export async function updateCategory(id: number, _prevState: unknown, formData: FormData) {
  const name_tr = formData.get('name_tr') as string
  const name = formData.get('name') as string || name_tr
  const order_num = parseInt(formData.get('order_num') as string, 10) || 0
  const status = formData.get('status') === 'on' ? 1 : 0

  if (!name_tr) {
    return { error: 'Lütfen kategori adını doldurun.' }
  }

  try {
    await prisma.categories.update({
      where: { id },
      data: {
        name,
        name_tr,
        slug: name_tr.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
        order_num,
        status,
      }
    })
  } catch (error) {
    console.error('Update category error:', error)
    return { error: 'Kategori güncellenirken hata oluştu.' }
  }

  revalidatePath('/admin/categories')
  revalidatePath('/')
  redirect('/admin/categories')
}

export async function deleteCategory(id: number) {
  try {
    // Check if category has products
    const productsCount = await prisma.products.count({
      where: { category_id: id }
    })

    if (productsCount > 0) {
      return { error: 'Bu kategoriye ait ürünler olduğu için silinemez. Önce ürünleri silin veya başka kategoriye taşıyın.' }
    }

    await prisma.categories.delete({
      where: { id }
    })
    
    revalidatePath('/admin/categories')
    revalidatePath('/')
    return { success: true }
  } catch (error) {
    console.error('Delete category error:', error)
    return { error: 'Silme işlemi başarısız oldu.' }
  }
}
