/home2/mshostin/hall-management.ms-hostingladz.com/app/Http/Controllers/CategoryController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Category;
use App\Models\Activity;
use Illuminate\Support\Facades\Auth;

class CategoryController extends Controller
{
    public function __construct()
    {
        $permissions = [
            'index'   => 'view-categories',
            'store'   => 'create-categories',
            'update'  => 'edit-categories',
            'destroy' => 'delete-categories',
        ];

        foreach ($permissions as $method => $permission) {
            $this->middleware("permission:{$permission}")->only($method);
        }
    }

    public function index()
    {
        $categories = Category::with('subcategories', 'creator', 'editor')->get();
        return view('dashboard.pages.categories', compact('categories'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255|unique:categories,name',
            'description' => 'nullable|string',
            'status' => 'required|in:0,1',
        ]);

        $category = Category::create($request->only(['name', 'description', 'status']));

        return redirect()->route('categories.index')->with('success', 'Category created successfully.');
    }

    public function update(Request $request, Category $category)
    {
        $request->validate([
            'name' => 'required|string|max:255|unique:categories,name,' . $category->id,
            'description' => 'nullable|string',
            'status' => 'required|in:0,1',
        ]);

        $original = $category->getOriginal();

        $category->update($request->only(['name', 'description', 'status']));

        return redirect()->route('categories.index')->with('success', 'Category updated successfully.');
    }

    public function destroy(Category $category)
    {
        $attributes = $category->getAttributes();
        $category->subcategories()->delete();
        $category->delete();

        return redirect()->route('categories.index')->with('success', 'Category deleted successfully.');
    }
}