/home2/mshostin/farms.ms-hostingladz.com/app/Http/Controllers/Backend/BlogController.php
<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Blog;
use App\Models\Category;
use App\Models\Subcategory;
use Illuminate\Support\Facades\Auth;

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

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

    public function index()
    {
        $blogs = Blog::latest()->get();
        return view('dashboard.blogs.index', compact('blogs'));
    }

    public function create()
    {
        $categories = Category::where('status', 1)->get();
        return view('dashboard.blogs.create', compact('categories'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'title'       => 'required|string|max:255',
            'excerpt'     => 'nullable|string',
            'heading_one' => 'required|string|max:255',
            'description_one' => 'required|string',
            'category_id' => 'nullable|exists:categories,id',
            'subcategory_id' => 'nullable|exists:subcategories,id',
            'tags'        => 'nullable|string',
            'image_one'   => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_two'   => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_three' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_four'  => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
        ]);

        // Handle image uploads
        $imageFields = ['image_one', 'image_two', 'image_three', 'image_four'];
        $images = [];
        foreach ($imageFields as $field) {
            $images[$field] = null;
            if ($request->hasFile($field)) {
                $file = $request->file($field);
                $filename = uniqid() . '_' . time() . '.' . $file->getClientOriginalExtension();
                $file->move(public_path('blog_images'), $filename);
                $images[$field] = 'blog_images/' . $filename;
            }
        }

        Blog::create([
            'title'               => $request->title,
            'excerpt'             => $request->excerpt,
            'heading_one'         => $request->heading_one,
            'description_one'     => $request->description_one,
            'image_one'           => $images['image_one'],
            'heading_two'         => $request->heading_two,
            'description_two'     => $request->description_two,
            'description_two_one'   => $request->description_two_1,
            'description_two_two'   => $request->description_two_2,
            'description_two_three' => $request->description_two_3,
            'description_two_four'  => $request->description_two_4,
            'description_two_five'  => $request->description_two_5,
            'description_two_six'   => $request->description_two_6,
            'description_two_seven' => $request->description_two_7,
            'image_two'           => $images['image_two'],
            'heading_three'       => $request->heading_three,
            'description_three'   => $request->description_three,
            'image_three'         => $images['image_three'],
            'image_four'          => $images['image_four'],
            'tags'                => $request->tags,
            'author'              => $request->author,
            'author_note'         => $request->author_note,
            'created_by'          => Auth::id(),
            'category_id'         => $request->category_id,
            'subcategory_id'      => $request->subcategory_id,
            'header_image_btn'    => $request->header_image_btn,
        ]);

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

    public function edit($id)
    {
        $blog = Blog::findOrFail($id);
        $categories = Category::where('status', 1)->get();
        $subcategories = Subcategory::where('category_id', $blog->category_id)->get();

        return view('dashboard.blogs.edit', compact('blog', 'categories', 'subcategories'));
    }

    public function update(Request $request, $id)
    {
        $blog = Blog::findOrFail($id);

        $request->validate([
            'title'       => 'required|string|max:255',
            'excerpt'     => 'nullable|string',
            'heading_one' => 'required|string|max:255',
            'description_one' => 'required|string',
            'category_id' => 'nullable|exists:categories,id',
            'subcategory_id' => 'nullable|exists:subcategories,id',
            'tags'        => 'nullable|string',
            'image_one'   => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_two'   => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_three' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'image_four'  => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
        ]);

        // Handle image uploads (keep old if not replaced)
        $imageFields = ['image_one', 'image_two', 'image_three', 'image_four'];
        $images = [];
        foreach ($imageFields as $field) {
            $images[$field] = $blog->$field; // keep old image
            if ($request->hasFile($field)) {
                $file = $request->file($field);
                $filename = uniqid() . '_' . time() . '.' . $file->getClientOriginalExtension();
                $file->move(public_path('blog_images'), $filename);
                $images[$field] = 'blog_images/' . $filename;
            }
        }

        $blog->update([
            'title'               => $request->title,
            'excerpt'             => $request->excerpt,
            'heading_one'         => $request->heading_one,
            'description_one'     => $request->description_one,
            'image_one'           => $images['image_one'],
            'heading_two'         => $request->heading_two,
            'description_two'     => $request->description_two,
            'description_two_one'   => $request->description_two_1,
            'description_two_two'   => $request->description_two_2,
            'description_two_three' => $request->description_two_3,
            'description_two_four'  => $request->description_two_4,
            'description_two_five'  => $request->description_two_5,
            'description_two_six'   => $request->description_two_6,
            'description_two_seven' => $request->description_two_7,
            'image_two'           => $images['image_two'],
            'heading_three'       => $request->heading_three,
            'description_three'   => $request->description_three,
            'image_three'         => $images['image_three'],
            'image_four'          => $images['image_four'],
            'tags'                => $request->tags,
            'author'              => $request->author, // Updated from form
            'author_note'         => $request->author_note,
            'category_id'         => $request->category_id,
            'subcategory_id'      => $request->subcategory_id,
            'header_image_btn'    => $request->header_image_btn,
            'status'              => $request->status ?? 1,
        ]);

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

    public function destroy($id)
    {
        $blog = Blog::findOrFail($id);
        $blog->delete();

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