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

namespace App\Http\Controllers;

use App\Models\Advertisement;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class AdvertisementController extends Controller
{
    public function index()
    {
        $advertisements = Advertisement::all();
        return view('dashboard.admin.advertisements.index', compact('advertisements'));
    }

    public function create()
    {
        return view('dashboard.admin.advertisements.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'type' => 'required|string|max:255',
            'btn_text' => 'required|string|max:255',
            'btn_url' => 'required|string|max:255',
            'title' => 'required|string|max:255',
            'image' => 'required|mimes:jpeg,png,jpg,gif,mp4,avi,mov,wmv|max:101200',
            'description' => 'required|string',
            'status' => 'required|integer|in:0,1',
            'index' => [
                'required',
                'integer',
                Rule::unique('advertisements', 'index'),
            ],
        ]);

        $existingAd = Advertisement::where('index', $request->index)->first();
        if ($existingAd) {
            return redirect()->back()->withErrors([
                'index' => "The index {$request->index} already exists. <a href='" . route('advertisements.edit', $existingAd->id) . "'>Click here</a> to edit the existing advertisement.",
            ])->withInput();
        }

        $imageName = time() . '.' . $request->image->extension();
        $request->image->move(public_path('images'), $imageName);

        Advertisement::create([
            'type' => $request->type,
            'btn_text' => $request->btn_text,
            'btn_url' => $request->btn_url,
            'title' => $request->title,
            'image' => $imageName,
            'description' => $request->description,
            'status' => $request->status,
            'index' => $request->index,
        ]);

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

    public function show(Advertisement $advertisement)
    {
        return view('dashboard.admin.advertisements.show', compact('advertisement'));
    }

    public function edit(Advertisement $advertisement)
    {
        return view('dashboard.admin.advertisements.edit', compact('advertisement'));
    }

    public function update(Request $request, Advertisement $advertisement)
    {
        $request->validate([
            'type' => 'required|string|max:255',
            'btn_text' => 'required|string|max:255',
            'btn_url' => 'required|string|max:255',
            'title' => 'required|string|max:255',
            'image' => 'required|mimes:jpeg,png,jpg,gif,mp4,avi,mov,wmv|max:101200',
            'description' => 'required|string',
            'status' => 'required|integer|in:0,1',
            'index' => [
                'required',
                'integer',
                Rule::unique('advertisements', 'index')->ignore($advertisement->id),
            ],
        ]);

        $existingAd = Advertisement::where('index', $request->index)->where('id', '!=', $advertisement->id)->first();
        if ($existingAd) {
            return redirect()->back()->withErrors([
                'index' => "The index {$request->index} already exists. <a href='" . route('advertisements.edit', $existingAd->id) . "'>Click here</a> to edit the existing advertisement.",
            ])->withInput();
        }

        if ($request->hasFile('image')) {
            $imageName = time() . '.' . $request->image->extension();
            $request->image->move(public_path('images'), $imageName);
            $advertisement->update([
                'type' => $request->type,
                'btn_text' => $request->btn_text,
                'btn_url' => $request->btn_url,
                'title' => $request->title,
                'image' => $imageName,
                'description' => $request->description,
                'index' => $request->index,
                'status' => $request->status,
            ]);
        } else {
            $advertisement->update($request->only(['type', 'btn_text', 'btn_url', 'title', 'description', 'status', 'index']));
        }

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

    public function destroy(Advertisement $advertisement)
    {
        if ($advertisement->image) {
            unlink(public_path('images/' . $advertisement->image));
        }

        $advertisement->delete();

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