<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Ad;
use Illuminate\Http\Request;

class AdController extends Controller
{
    public function index()
    {
        $ads = Ad::orderBy('position')->orderBy('sort_order')->get();
        $positions = Ad::positions();
        return view('admin.ads.index', compact('ads', 'positions'));
    }

    public function create()
    {
        $positions = Ad::positions();
        $sizes = Ad::sizes();
        return view('admin.ads.form', compact('positions', 'sizes'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string|max:500',
            'position' => 'required|string|max:50',
            'size' => 'nullable|string|max:20',
            'code' => 'required|string',
            'is_active' => 'boolean',
            'sort_order' => 'nullable|integer|min:0',
        ]);

        Ad::create([
            'name' => $request->name,
            'description' => $request->description,
            'position' => $request->position,
            'size' => $request->size,
            'code' => $request->code,
            'is_active' => $request->has('is_active'),
            'sort_order' => $request->sort_order ?? 0,
        ]);

        return redirect()->route('admin.ads.index')
            ->with('success', 'Iklan berhasil ditambahkan.');
    }

    public function show(Ad $ad)
    {
        return redirect()->route('admin.ads.edit', $ad);
    }

    public function edit(Ad $ad)
    {
        $positions = Ad::positions();
        $sizes = Ad::sizes();
        return view('admin.ads.form', compact('ad', 'positions', 'sizes'));
    }

    public function update(Request $request, Ad $ad)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string|max:500',
            'position' => 'required|string|max:50',
            'size' => 'nullable|string|max:20',
            'code' => 'required|string',
            'is_active' => 'boolean',
            'sort_order' => 'nullable|integer|min:0',
        ]);

        $ad->update([
            'name' => $request->name,
            'description' => $request->description,
            'position' => $request->position,
            'size' => $request->size,
            'code' => $request->code,
            'is_active' => $request->has('is_active'),
            'sort_order' => $request->sort_order ?? 0,
        ]);

        return redirect()->route('admin.ads.index')
            ->with('success', 'Iklan berhasil diperbarui.');
    }

    public function destroy(Ad $ad)
    {
        $ad->delete();
        return redirect()->route('admin.ads.index')
            ->with('success', 'Iklan berhasil dihapus.');
    }

    /**
     * Toggle active status via AJAX or redirect
     */
    public function toggle(Ad $ad)
    {
        $ad->update(['is_active' => !$ad->is_active]);
        return redirect()->route('admin.ads.index')
            ->with('success', "Iklan \"{$ad->name}\" " . ($ad->is_active ? 'diaktifkan' : 'dinonaktifkan') . '.');
    }
}
