<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Concerns\LogsAdminActions;
use App\Models\TrustService;
use Illuminate\Http\Request;

class AdminTrustServiceController extends Controller
{
    use LogsAdminActions;

    public function index()
    {
        $services = TrustService::orderBy('sort_order')->get();
        return view('admin.trust-services.index', compact('services'));
    }

    public function create()
    {
        return view('admin.trust-services.create');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'url' => 'required|string|url',
            'icon_url' => 'nullable|string|url',
            'description' => 'nullable|string',
            'verification_mode' => 'required|in:automated,manual',
            'verification_instructions' => 'nullable|string',
            'is_active' => 'boolean',
            'sort_order' => 'integer',
        ]);

        $service = TrustService::create($validated);

        $this->auditLog('create_trust_service', $service, [
            'name' => $service->name,
            'mode' => $service->verification_mode,
        ]);

        return redirect()->route('admin.trust-services.index')
            ->with('success', 'Trust service created successfully.');
    }

    public function edit(TrustService $service)
    {
        return view('admin.trust-services.edit', compact('service'));
    }

    public function update(Request $request, TrustService $service)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'url' => 'required|string|url',
            'icon_url' => 'nullable|string|url',
            'description' => 'nullable|string',
            'verification_mode' => 'required|in:automated,manual',
            'verification_instructions' => 'nullable|string',
            'is_active' => 'boolean',
            'sort_order' => 'integer',
        ]);

        $service->update($validated);

        $this->auditLog('update_trust_service', $service, [
            'name' => $service->name,
            'mode' => $service->verification_mode,
        ]);

        return redirect()->route('admin.trust-services.index')
            ->with('success', 'Trust service updated successfully.');
    }

    public function destroy(TrustService $service)
    {
        $serviceName = $service->name;
        $service->delete();

        $this->auditLog('delete_trust_service', null, [
            'name' => $serviceName,
        ]);

        return redirect()->route('admin.trust-services.index')
            ->with('success', 'Trust service deleted successfully.');
    }
}
