<?php

namespace App\Http\Controllers\SuperAdmin;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use App\Models\ImageUpload;

class AdminController extends Controller
{
    public function index()
    {
        $admins = User::where('role', 'admin')->paginate(20);
        return view('superadmin.admins.index', compact('admins'));
    }

    public function show()
    {
        $admins = User::where('role', 'admin')->paginate(20);
        return view('superadmin.admins.index', compact('admins'));
    }

    public function create()
    {
        return view('superadmin.admins.create');
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'name'          => 'required|string|max:255',
            'email'         => 'required|email|unique:users,email',
            'mobile_no'     => 'required|string|max:20',
            'business_name' => 'required|string|max:255',
            'logo'          => 'nullable|image',
            'password'      => 'required|string|min:6',
        ]);

        if ($request->hasFile('logo')) {
            $data['logo'] = ImageUpload::upload('/uploads/logos',$request->logo);
        }

        $data['role']     = 'admin';
        $data['password'] = Hash::make($data['password']);

        User::create($data);

        return redirect()->route('admins.index')
            ->with('success', 'Admin created.');
    }

    public function edit(User $admin)
    {
        abort_unless($admin->role === 'admin', 404);
        return view('superadmin.admins.edit', compact('admin'));
    }

    public function update(Request $request, User $admin)
    {
        abort_unless($admin->role === 'admin', 404);

        $data = $request->validate([
            'name'          => 'required|string|max:255',
            'email'         => 'required|email|unique:users,email,' . $admin->id,
            'mobile_no'     => 'required|string|max:20',
            'business_name' => 'required|string|max:255',
            'logo'          => 'nullable|image',
            'password'      => 'nullable|string|min:6',
        ]);

        if ($request->hasFile('logo')) {
            $data['logo'] = ImageUpload::upload('/uploads/logos',$request->logo);
        }

        if (!empty($data['password'])) {
            $data['password'] = Hash::make($data['password']);
        } else {
            unset($data['password']);
        }

        $admin->update($data);

        return redirect()->route('admins.index')
            ->with('success', 'Admin updated.');
    }

    public function destroy(User $admin)
    {
        abort_unless($admin->role === 'admin', 404);
        $admin->delete();

        return redirect()->route('admins.index')
            ->with('success', 'Admin deleted.');
    }
}
