/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/BlogsController.php
<?php

namespace App\Http\Controllers;

use App\Models\Blogs;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\User;
use App\Models\Region;
use Illuminate\Support\Facades\Auth;

class BlogsController extends Controller
{
    //
    public function index(Request $request)
    {
        $blogs = Blogs::with("category", "user", "region");
        if ($request->has('search') && $request->search != null && $request->search != '') {
            $blogs = $blogs->where('title', 'LIKE', '%' . $request->search . '%');
        }
        
        if (Auth::user()->isAdmin()) {
            $blogs = $blogs->paginate(10);
        } else {
            $blogs = $blogs->where('user_id', Auth::id())->paginate(10);
        }
        
        if ($request->has("type")) {
            return $blogs;
        }

        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subVendor.layouts.app',
        };

        return view('dashboard.admin.blogs.index', compact('blogs', 'layout'));
    }

    public function create()
    {
        $user = User::where('role_id', '!=', 1)->get();
        $categories = Category::where('type', 'blogging')->get();
        $regions = Region::all();

        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subVendor.layouts.app',
        };

        return view('dashboard.admin.blogs.create', compact('categories', 'user', 'regions', 'layout'));
    }

    public function store(Request $request)
    {
        try {
            $request->validate([
                'title' => 'required|unique:blogs',
                'image' => 'required|image|max:2048',
                'description' => 'required',
                'status' => 'required|in:0,1',
                'category_id' => [
                    'required',
                    'exists:categories,id'
                ],
                'region_id' => [
                    'required',
                    'exists:regions,id'
                ],
            ]);
            if (auth()->user()->role_id == 1) {
                $request->validate([
                    'user_id' => [
                        'required',
                        'exists:users,id'
                    ]
                ]);
            }

            $blogs = new Blogs();
            $blogs->user_id = $request->user_id ?? auth()->user()->id;
            $blogs->category_id = $request->category_id;
            $blogs->region_id = $request->region_id;
            $blogs->title = $request->title;
            $blogs->slug = Str::slug($request->title, '-');
            // if ($request->hasFile('image')) {
            //     $blogs->image = $request->file('image')->store('images/blogs');
            // }
            if ($request->hasFile('image')) {
                $fileName = time() . '.' . $request->image->extension();
                $request->image->move(public_path('blog_images'), $fileName);
                $file = $request->file('image');
                $blogs->image = $fileName;
            }
            $blogs->description = $request->description;
            $blogs->status = $request->status;
            $blogs->save();
            return redirect()->route('blogs.index')->with('success', 'Blog created successfully...');
        } catch (\Exception $e) {
            return back()->withErrors(['error' => $e->getMessage()])->withInput();
        }
    }

    public function edit(Blogs $blog)
    {
        $user = User::where('role_id', '!=', 1)->get();
        $categories = Category::where('type', 'blogging')->get();
        $regions = Region::all();

        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subVendor.layouts.app',
        };

        return view('dashboard.admin.blogs.edit', compact('blog', 'categories', 'user', 'regions', 'layout'));
    }

    public function update(Request $request, Blogs $blog)
    {
        try {
            $request->validate([
                'title' => 'required',
                'image' => 'image|max:2048',
                'description' => 'required',
                'status' => 'required|in:0,1',
                'category_id' => [
                    'required',
                    'exists:categories,id'
                ],
                'region_id' => [
                    'required',
                    'exists:regions,id'
                ],
            ]);

            if (auth()->user()->role_id == 1) {
                $request->validate([
                    'user_id' => [
                        'required',
                        'exists:users,id'
                    ]
                ]);
            }

            $blog->user_id = $request->user_id ?? auth()->user()->id;
            $blog->title = $request->title;
            $blog->slug = Str::slug($request->title, '-');
            $blog->category_id = $request->category_id;
            $blog->region_id = $request->region_id;

            // if ($request->hasFile('image')) {
            //     $blog->image = $request->file('image')->store('images/blogs');
            // }
            if ($request->hasFile('image')) {
                $fileName = time() . '.' . $request->image->extension();
                $request->image->move(public_path('blog_images'), $fileName);
                $file = $request->file('image');
                $blog->image = $fileName;
            }

            $blog->description = $request->description;
            $blog->status = $request->status;
            // dd($blog, 'ok');

            // dd($blog, 'oks');
            $blog->save();

            return redirect()->route('blogs.index')->with('success', 'Blog updated successfully.');
        } catch (\Exception $e) {
            return back()->withErrors(['error' => $e->getMessage()])->withInput();
        }
    }

    public function destroy(Blogs $blog)
    {
        $blog->delete();
        return redirect()->route('blogs.index')->with('success', 'Blog deleted successfully.');
    }
}