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

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Customer;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;

class CustomerController extends Controller
{
    public function login()
    {
        return view('ShopFrontend.customer.login');
    }

    public function register()
    {
        return view('ShopFrontend.customer.register');
    }

    protected function generateUniqueSlug($title)
    {
        $slug = Str::slug($title);
        $uniqueSlug = $slug;
        $counter = 1;
        while (User::where('slug', $uniqueSlug)->exists()) {
            $uniqueSlug = $slug . '-' . $counter++;
        }
        return $uniqueSlug;
    }

    public function profile()
    {
        $user = User::find(Auth::id());
        return view('ShopFrontend.customer.profile', compact('user'));
    }

    public function profileUpdate(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'first_name' => ['required', 'string', 'max:255'],
            'last_name' => ['required', 'string', 'max:255'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
            'email' => [
                'required',
                'string',
                'email',
            ],
        ]);

        if ($validator->fails()) {
            return redirect()->back()
                ->withErrors($validator)
                ->withInput();
        }

        $user = $this->updateUser($request->all());

        return redirect()->route('users.profile')
            ->with('success', 'Profile updated successfully.');
    }

    protected function updateUser(array $data)
    {
        $slug = $this->generateUniqueSlug($data['first_name'] . ' ' . $data['last_name']);

        $user = User::find(Auth::id());
        $user->update([
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'full_name' => $data['first_name'] . ' ' . $data['last_name'],
            'password' => Hash::make($data['password']),
            'role_id' => 4,
            'slug' => $slug,
        ]);

        Customer::create([
            'user_id' => $user->id,
            'status' => 1,
        ]);

        return $user;
    }
}