<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\CsvImportTrait;
use App\Http\Requests\MassDestroyUserRequest;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Models\Role;
use App\Models\User;
use App\Models\Notification;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Yajra\DataTables\Facades\DataTables;
use App\Mail\KYCRejectedMail;
use Illuminate\Support\Facades\Mail;
use App\Jobs\SendKYCRejectedMail;
use App\Jobs\SendSellerRejectedMail;

class UsersController extends Controller
{
    use CsvImportTrait;

    public function getBuyerData(Request $request)
    {
        // abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        if ($request->ajax()) {
            $query = User::with(['roles']);
            
            $query->whereHas('roles');

            $query->select(['users.id', 'users.first_name', 'users.last_name', 'users.country_id', 'users.phone', 'users.email', 'users.kyc_status', 'users.seller_status', 'users.status', 'users.created_at']);

            if ($request->has('role') && !empty($request->role)) {
                if($request->role == 'buyer_requested'){
                    $query->whereIn('kyc_status', [0,1]);
                    // $query->orderBy('kyc_status', 'asc');

                    if ($request->has('order')) {
                        $orderColumnIndex = $request->input('order.0.column');
                        $orderDir = $request->input('order.0.dir') ?? 'asc';

                        $columns = $request->input('columns');
                        $orderColumnName = $columns[$orderColumnIndex]['data'] ?? null;

                        if ($orderColumnName === 'kyc_status') {
                            $query->orderBy('users.kyc_status', $orderDir);
                        }
                    }
                }

                if($request->role == 'buyer_rejected'){
                    $query->where('kyc_status', 3);
                    $query->orderBy('kyc_status', 'desc');
                }

                if($request->role == 'Buyer'){
                    $query->whereHas('roles', function ($q) use ($request) {
                        $q->where('title', $request->role);
                    });

                    //$query->whereIn('kyc_status', [2,3]);
                    
                    $query->where('kyc_status', 2);
                    $query->orderBy('kyc_status', 'desc');
                }
            }

            if ($request->has('kyc_status') && trim($request->kyc_status) !== '') {
                $query->where('kyc_status', $request->kyc_status);
            }

            if ($request->has('status') && trim($request->status) !== '') {
                $query->where('status', $request->status);
            }

            $table = Datatables::of($query);

            $table->filterColumn('full_name', function ($query, $keyword) {
                $query->whereRaw("LOWER(CONCAT(users.first_name, ' ', users.last_name)) LIKE ?", ["%".strtolower($keyword)."%"]);
            });

            $table->addColumn('actions', '&nbsp;');

            $table->editColumn('actions', function ($row) {
                $viewGate      = 'user_show';
                $editGate      = 'user_edit';
                $deleteGate    = 'user_delete';
                $crudRoutePart = 'users';

                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                return view('partials.datatablesActions', compact(
                    'viewGate',
                    'editGate',
                    'deleteGate',
                    'crudRoutePart',
                    'row',
                    'isAdmin'
                ));
            });

            $table->editColumn('full_name', function ($row) {
                return trim((ucfirst($row->first_name) ?? '') . ' ' . (ucfirst($row->last_name) ?? ''));
            });
            
            $table->editColumn('phone', function ($row) {
                return $row->phone ? $row->phone : '';
            });

            $table->editColumn('country_id', function ($row) {
                $country_details = getCountrydetailsById($row->country_id);
                 
                if(isset($country_details->top_level_domain)){
                    $country_data = '<span class="d-flex" style="width: max-content;">';
                        $country_data .= sprintf('<img src="%s/uploads/flags/%s.png"> %s (+%s)', env('app_url'), $country_details->top_level_domain, '&nbsp;'.$country_details->country_name, $country_details->phone_code);
                    $country_data .= '</span>';

                    return $country_data;
                } else {
                    return;
                }
            });

            $table->editColumn('email', function ($row) {
                return $row->email ? $row->email : '';
            });

            $table->editColumn('roles', function ($row) {
                $labels = [];
                foreach ($row->roles as $role) {
                    $labels[] = sprintf('<span class="label label-info label-many">%s</span>', $role->title);
                }

                return implode(' ', $labels);
            });

            $table->editColumn('kyc_status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $statusMap = [
                    0 => ['label' => 'Pending', 'class' => 'text-warning'],
                    1 => ['label' => 'Under Review', 'class' => 'text-info'],
                    2 => ['label' => 'Approved', 'class' => 'text-success'],
                    3 => ['label' => 'Rejected', 'class' => 'text-danger'],
                ];
    
                $status = $statusMap[$row->kyc_status] ?? $statusMap[0];
    
                return sprintf('<span class="label label-info label-many %s">%s</span>', $status['class'], $status['label']);
            });

            $table->editColumn('status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $checked = $row->status == 1 ? 'checked' : '';

                return sprintf('<input type="checkbox" class="toggle-flag" data-id="%s" %s data-toggle="toggle" data-on="Unblock" data-off="Block" data-size="sm" data-onstyle="success" data-offstyle="danger">', $row->id, $checked);
            });

            $table->editColumn('created_at', function ($row) {
                return isset($row->created_at) ? $row->created_at->format('d-m-Y H:i') : ' ';
            });

            $table->rawColumns(['actions', 'country_id', 'roles', 'kyc_status', 'status']);

            return $table->make(true);
        }

        $buyer_count = User::whereIn('kyc_status', [0,1])->whereHas('roles', function ($q) {
            $q->where('title', 'Buyer');
        })->count();

        return view('admin.users.buyer_data', compact('buyer_count'));
    }

    public function getSellerData(Request $request)
    {
        // abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        if ($request->ajax()) {
            $query = User::with(['roles']);
            
            $query->whereHas('roles');

            $query->select(['users.id', 'users.first_name', 'users.last_name', 'users.country_id', 'users.phone', 'users.email', 'users.kyc_status', 'users.seller_status', 'users.status', 'users.created_at']);

            if ($request->has('role') && !empty($request->role)) {
                if($request->role == 'sellers_requested'){
                    $query->where('seller_status', 1);
                    $query->orderBy('seller_status', 'desc');
                }

                if($request->role == 'Seller'){
                    $query->whereHas('roles', function ($q) use ($request) {
                        $q->where('title', $request->role);
                    });

                    // $query->whereIn('seller_status', [2,3]);

                    $query->where('seller_status', 2);
                    $query->orderBy('seller_status', 'desc');
                }

                if($request->role == 'seller_rejected'){
                    $query->where('seller_status', 3);
                    $query->orderBy('seller_status', 'desc');
                }
            }

            if ($request->has('seller_status') && trim($request->seller_status) !== '') {
                $query->where('seller_status', $request->seller_status);
            }

            if ($request->has('status') && trim($request->status) !== '') {
                $query->where('status', $request->status);
            }

            $table = Datatables::of($query);

            $table->filterColumn('full_name', function ($query, $keyword) {
                $query->whereRaw("LOWER(CONCAT(users.first_name, ' ', users.last_name)) LIKE ?", ["%".strtolower($keyword)."%"]);
            });

            $table->addColumn('actions', '&nbsp;');

            $table->editColumn('actions', function ($row) {
                $viewGate      = 'user_show';
                $editGate      = 'user_edit';
                $deleteGate    = 'user_delete';
                $crudRoutePart = 'users';

                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                return view('partials.datatablesActions', compact(
                    'viewGate',
                    'editGate',
                    'deleteGate',
                    'crudRoutePart',
                    'row',
                    'isAdmin'
                ));
            });

            $table->editColumn('full_name', function ($row) {
                return trim((ucfirst($row->first_name) ?? '') . ' ' . (ucfirst($row->last_name) ?? ''));
            });
            
            $table->editColumn('phone', function ($row) {
                return $row->phone ? $row->phone : '';
            });

            $table->editColumn('country_id', function ($row) {
                $country_details = getCountrydetailsById($row->country_id);
                
                if(isset($country_details->top_level_domain)){
                    $country_data = '<span class="d-flex" style="width: max-content;">';
                        $country_data .= sprintf('<img src="%s/uploads/flags/%s.png"> %s (+%s)', env('app_url'), $country_details->top_level_domain, '&nbsp;'.$country_details->country_name, $country_details->phone_code);
                    $country_data .= '</span>';

                    return $country_data;
                } else {
                    return;
                }
            });

            $table->editColumn('email', function ($row) {
                return $row->email ? $row->email : '';
            });

            $table->editColumn('roles', function ($row) {
                $labels = [];
                foreach ($row->roles as $role) {
                    $labels[] = sprintf('<span class="label label-info label-many">%s</span>', $role->title);
                }

                return implode(' ', $labels);
            });

            $table->editColumn('seller_status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $statusMap = [
                    0 => ['label' => '-', 'class' => ''],
                    1 => ['label' => 'Requested', 'class' => 'text-info'],
                    2 => ['label' => 'Approved', 'class' => 'text-success'],
                    3 => ['label' => 'Rejected', 'class' => 'text-danger'],
                ];
    
                $status = $statusMap[$row->seller_status] ?? $statusMap[0];
    
                return sprintf('<span class="label label-info label-many %s">%s</span>', $status['class'], $status['label']);
            });

            $table->editColumn('status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $checked = $row->status == 1 ? 'checked' : '';

                return sprintf('<input type="checkbox" class="toggle-flag" data-id="%s" %s data-toggle="toggle" data-on="Unblock" data-off="Block" data-size="sm" data-onstyle="success" data-offstyle="danger">', $row->id, $checked);
            });

            $table->editColumn('created_at', function ($row) {
                return isset($row->created_at) ? $row->created_at->format('d-m-Y H:i') : ' ';
            });

            $table->rawColumns(['actions', 'country_id', 'roles', 'seller_status', 'status']);

            return $table->make(true);
        }

        // $seller_count = User::where('seller_status', 1)->whereHas('roles', function ($q) {
        //     $q->where('title', 'Seller');
        // })->count();

        $seller_count = User::where('seller_status', 1)->count();

        return view('admin.users.seller_data', compact('seller_count'));
    }

    public function index(Request $request)
    {
        abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        if ($request->ajax()) {
            $query = User::with(['roles']);
            
            $query->whereHas('roles');

            $query->select(['users.id', 'users.first_name', 'users.last_name', 'users.country_id', 'users.phone', 'users.email', 'users.kyc_status', 'users.seller_status', 'users.created_at']);

            if ($request->has('role') && !empty($request->role)) {
                if($request->role == 'buyer_requested'){
                    $query->whereIn('kyc_status', [0,1]);
                    // $query->orderBy('kyc_status', 'asc');

                    if ($request->has('order')) {
                        $orderColumnIndex = $request->input('order.0.column');
                        $orderDir = $request->input('order.0.dir') ?? 'asc';

                        $columns = $request->input('columns');
                        $orderColumnName = $columns[$orderColumnIndex]['data'] ?? null;

                        if ($orderColumnName === 'kyc_status') {
                            $query->orderBy('users.kyc_status', $orderDir);
                        }
                    }
                }

                if($request->role == 'buyer_rejected'){
                    $query->where('kyc_status', 3);
                    $query->orderBy('kyc_status', 'desc');
                }

                if($request->role == 'Buyer'){
                    $query->whereHas('roles', function ($q) use ($request) {
                        $q->where('title', $request->role);
                    });

                    //$query->whereIn('kyc_status', [2,3]);
                    
                    $query->where('kyc_status', 2);
                    $query->orderBy('kyc_status', 'desc');
                }

                if($request->role == 'sellers_requested'){
                    $query->where('seller_status', 1);
                    $query->orderBy('seller_status', 'desc');
                }

                if($request->role == 'Seller'){
                    $query->whereHas('roles', function ($q) use ($request) {
                        $q->where('title', $request->role);
                    });

                    // $query->whereIn('seller_status', [2,3]);

                    $query->where('seller_status', 2);
                    $query->orderBy('seller_status', 'desc');
                }

                if($request->role == 'seller_rejected'){
                    $query->where('seller_status', 3);
                    $query->orderBy('seller_status', 'desc');
                }
            }

            if ($request->has('kyc_status') && trim($request->kyc_status) !== '') {
                $query->where('kyc_status', $request->kyc_status);
            }

            if ($request->has('seller_status') && trim($request->seller_status) !== '') {
                $query->where('seller_status', $request->seller_status);
            }

            $table = Datatables::of($query);

            $table->filterColumn('full_name', function ($query, $keyword) {
                $query->whereRaw("LOWER(CONCAT(users.first_name, ' ', users.last_name)) LIKE ?", ["%".strtolower($keyword)."%"]);
            });

            $table->addColumn('actions', '&nbsp;');

            $table->editColumn('actions', function ($row) {
                $viewGate      = 'user_show';
                $editGate      = 'user_edit';
                $deleteGate    = 'user_delete';
                $crudRoutePart = 'users';

                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                return view('partials.datatablesActions', compact(
                    'viewGate',
                    'editGate',
                    'deleteGate',
                    'crudRoutePart',
                    'row',
                    'isAdmin'
                ));
            });

            $table->editColumn('full_name', function ($row) {
                return trim((ucfirst($row->first_name) ?? '') . ' ' . (ucfirst($row->last_name) ?? ''));
            });
            
            $table->editColumn('phone', function ($row) {
                return $row->phone ? $row->phone : '';
            });

            $table->editColumn('country_id', function ($row) {
                $country_details = getCountrydetailsById($row->country_id);
                
                if(isset($country_details->top_level_domain)){
                    return sprintf('<span class="d-flex"><img src="%s/uploads/flags/%s.png"> %s (+%s) </span>', env('app_url'), $country_details->top_level_domain, '&nbsp;'.$country_details->country_name, $country_details->phone_code);
                } else {
                    return;
                }
            });

            $table->editColumn('email', function ($row) {
                return $row->email ? $row->email : '';
            });

            $table->editColumn('roles', function ($row) {
                $labels = [];
                foreach ($row->roles as $role) {
                    $labels[] = sprintf('<span class="label label-info label-many">%s</span>', $role->title);
                }

                return implode(' ', $labels);
            });

            $table->editColumn('kyc_status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $statusMap = [
                    0 => ['label' => 'Pending', 'class' => 'text-warning'],
                    1 => ['label' => 'Under Review', 'class' => 'text-info'],
                    2 => ['label' => 'Approved', 'class' => 'text-success'],
                    3 => ['label' => 'Rejected', 'class' => 'text-danger'],
                ];
    
                $status = $statusMap[$row->kyc_status] ?? $statusMap[0];
    
                return sprintf('<span class="label label-info label-many %s">%s</span>', $status['class'], $status['label']);
            });

            $table->editColumn('seller_status', function ($row) {
                $isAdmin = $row->roles->contains(fn($role) => strtolower($role->title) === 'admin');

                if ($isAdmin) {
                    return '-';
                }

                $statusMap = [
                    0 => ['label' => '-', 'class' => ''],
                    1 => ['label' => 'Requested', 'class' => 'text-info'],
                    2 => ['label' => 'Approved', 'class' => 'text-success'],
                    3 => ['label' => 'Rejected', 'class' => 'text-danger'],
                ];
    
                $status = $statusMap[$row->seller_status] ?? $statusMap[0];
    
                return sprintf('<span class="label label-info label-many %s">%s</span>', $status['class'], $status['label']);
            });

            $table->editColumn('created_at', function ($row) {
                return isset($row->created_at) ? $row->created_at->format('d-m-Y H:i') : ' ';
            });

            $table->rawColumns(['actions', 'country_id', 'roles', 'kyc_status', 'seller_status']);

            return $table->make(true);
        }

        $buyer_count = User::whereIn('kyc_status', [0,1])->whereHas('roles', function ($q) {
            $q->where('title', 'Buyer');
        })->count();

        $seller_count = User::where('seller_status', 1)->whereHas('roles', function ($q) {
            $q->where('title', 'Seller');
        })->count();

        $seller_count = User::where('seller_status', 1)->count();

        $roles = Role::all();

        return view('admin.users.index', compact('roles', 'buyer_count', 'seller_count'));
    }

    public function create()
    {
        abort_if(Gate::denies('user_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        $roles = Role::pluck('title', 'id');

        $country_details = getCountrydetailsById();

        return view('admin.users.create', compact('roles', 'country_details'));
    }

    public function store(StoreUserRequest $request)
    {
        $user_data = [
            'first_name' => $request->first_name,
            'last_name' => $request->last_name,
            'country_id' => $request->country_id,
            'phone' => $request->phone,
            'email' => $request->email,
            'address' => $request->address,
            'password' => bcrypt('password'),
            'document_type' => $request->document_type
        ];

        if ($request->hasFile('document_picture')) {
            $imageName = time().'.'.$request->file('document_picture')->getClientOriginalExtension();
            $request->file('document_picture')->move(public_path('uploads/documents'), $imageName);
            $user_data['document_picture'] = 'uploads/documents/' . $imageName;
        }

        $user = User::create($request->all());
        $user->roles()->sync($request->input('roles', []));

        return redirect()->route('admin.users.index')->with('success', __('global.user_store'));
    }

    public function edit(User $user)
    {
        abort_if(Gate::denies('user_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        $roles = Role::pluck('title', 'id');

        $country_details = getCountrydetailsById();

        $user->load('roles');
        
        return view('admin.users.edit', compact('roles', 'user', 'country_details'));
    }

    public function update(UpdateUserRequest $request, User $user)
    {

        // echo "<pre>"; print_r($request->all()); exit;

        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->country_id = $request->country_id;
        $user->phone = $request->phone;
        $user->email = $request->email;
        $user->address = $request->address;
        // $user->kyc_status = $request->kyc_status;
        $user->status = $request->status;
        $user->document_type = $request->document_type;
        $user->seller_commission_percentage = $request->seller_commission_percentage;

        if ($request->hasFile('document_picture')) {
            if ($user->document_picture) {
                $oldImagePath = public_path($user->document_picture);
                if (file_exists($oldImagePath)) {
                    unlink($oldImagePath);
                }
            }

            $imageName = time().'.'.$request->file('document_picture')->getClientOriginalExtension();
            $request->file('document_picture')->move(public_path('uploads/documents'), $imageName);
            $user->document_picture = 'uploads/documents/' . $imageName;
        }

        $user->roles()->sync($request->input('roles', []));

        // $user_data = [
        //     'full_name' => $request->first_name.' '.$request->last_name,
        //     'kyc_rejection_reason' => $request->reason
        // ];

        // if($request->kyc_status == 2){
        //     Mail::to($request->email)->send(new KYCRejectedMail($user_data));
        // }
        
        $user->save();

        // return redirect()->route('admin.users.index')->with('success', __('global.user_update'));

         // --- Determine redirect based on role ---
        $roles = $request->input('roles', []);
        $roleId = is_array($roles) ? (int) $roles[0] : (int) $roles;

        if ($roleId === 5) {
            return redirect()->route('admin.users.seller')->with('success', __('global.user_update'));
        } elseif ($roleId === 3) {
            return redirect()->route('admin.users.buyer')->with('success', __('global.user_update'));
        }

        // Default redirect if role not matched
        return redirect()->route('admin.users.index')->with('success', __('global.user_update'));
    }

    public function userStatusUpdate(Request $request){
        $user = User::findOrFail($request->user_id);
        $user->status = $request->status;
        $user->save();

        if($request->status == '1'){
            $status = 'Unblock';
        } else {
            $status = 'Block';
        }

        return response()->json(['message' => "User $status successfully."]);
    }

    public function KYCStatusUpdate(Request $request)
    {
        $user = User::findOrFail($request->user_id);
        $user->kyc_status = $request->kyc_status; // Set as Rejected
        //$user->kyc_rejection_reason = $request->kyc_rejection_reason; // Save reason
        
        if ($request->kyc_status == 3) {
            $userData = [
                'full_name' => $user->first_name . ' ' . $user->last_name,
                'kyc_rejection_reason' => $request->kyc_rejection_reason
            ];

            dispatch(new SendKYCRejectedMail($userData, $user->email));
            // SendKYCRejectedMail::dispatch($userData, $user->email);
            // Mail::to($user->email)->send(new KYCRejectedMail($user_data));

            $message = "Dear $user->first_name $user->last_name, your KYC verification request has been rejected. Please check the reason in your mail account and resubmit your documents required.";
            pushNotification($user->id, $message);

            Notification::create([
                'user_id' => $user->id,
                'title' => "Buyer KYC Status Request",
                'message' => $message,
            ]);

            if ($user->document_picture) {
                $imagePath = public_path($user->document_picture);
            
                if (file_exists($imagePath)) {
                    unlink($imagePath);
                }
            }
    
            $user->document_type = null;
            $user->document_picture = null;
        } else {
            $message = "Your KYC has been approved. You can now enjoy full access to auction features.";
            Notification::create([
                'user_id' => $user->id,
                'title' => "Buyer KYC Status Request",
                'message' => $message,
            ]);
            
            pushNotification($user->id, $message);
        }

        $user->save();

        return response()->json(['message' => 'KYC Status updated successfully.']);
    }

    public function show($id, Request $request)
    {
        abort_if(Gate::denies('user_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        // Decode Base64 ID if applicable
        $decodedId = base64_decode($id, true);

        // Validate if decoding was successful; otherwise, use the original ID
        $userId = is_numeric($decodedId) ? $decodedId : $id;

        $user = User::findOrFail($userId);
        $user->load('roles');

        return view('admin.users.show', compact('user'));

        // if($request->type == 1){
        //     return view('emails.welcome');
        // } else if($request->type == 2){
        //     return view('emails.kyc_rejected');
        // } else if($request->type == 3){
        //     return view('emails.kyc_verification');
        // }
    }

    public function destroy(User $user)
    {
        abort_if(Gate::denies('user_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        if ($user->document_picture) {
            $imagePath = public_path($user->document_picture);
        
            if (file_exists($imagePath)) {
                unlink($imagePath); // Deletes the file from public folder
            }
        }

        $user->phone = $user->phone . '_' . time();
        $user->save();

        $user->delete();

        return back()->with('success', __('global.user_delete'));
    }

    public function massDestroy(MassDestroyUserRequest $request)
    {
        $users = User::find(request('ids'));

        foreach ($users as $user) {
            if ($user->document_picture) {
                $imagePath = public_path($user->document_picture);
            
                if (file_exists($imagePath)) {
                    unlink($imagePath); // Deletes the file from public folder
                }
            }

            $user->delete();
        }

        return response(null, Response::HTTP_NO_CONTENT);
    }

    public function sellerStatusUpdate(Request $request){
        $user = User::findOrFail($request->user_id);
        $user->seller_status = $request->seller_status; // Set as Rejected
        //$user->seller_rejection_reason = $request->seller_rejection_reason; // Save reason

        if ($request->seller_status == 2) {
            $user->roles()->sync([5]); // Seller ID 5
	    
	    $message = "Congratulations! Your seller request has been approved. You can now list your items for auction.";
            Notification::create([
                'user_id' => $user->id,
                'title' => "Become A Seller Request",
                'message' => $message,
            ]);
            
            pushNotification($user->id, $message);
        }
        
        if ($request->seller_status == 3) {
            $userData = [
                'full_name' => $user->first_name . ' ' . $user->last_name,
                'seller_rejection_reason' => $request->seller_rejection_reason
            ];

            dispatch(new SendSellerRejectedMail($userData, $user->email));

            $message = "Dear $user->first_name $user->last_name, your seller account request has been rejected. Please check the reason in your mail account and resubmit your profile.";
            pushNotification($user->id, $message);

            Notification::create([
                'user_id' => $user->id,
                'title' => "Become A Seller Request",
                'message' => "Your seller request has been rejected. Please contact support or review the requirements.",
            ]);

            if ($user->seller_profile_image) {
                $profile_image_path = public_path($user->seller_profile_image);
            
                if (file_exists($profile_image_path)) {
                    unlink($profile_image_path);
                }
            }

            if ($user->seller_cover_image) {
                $cover_image_path = public_path($user->seller_cover_image);
            
                if (file_exists($cover_image_path)) {
                    unlink($cover_image_path);
                }
            }
    
            $user->seller_profile_image = null;
            $user->seller_cover_image = null;
        }

        $user->save();

        return response()->json(['message' => 'Seller Status updated successfully.']);    
    }
}
